我想同时弹出一个模式视图和上一个视图。例如,查看日历应用程序。当我在Edit
屏幕上并选择Delete Event
时,我将回到日历视图。
弹出以模态形式显示的Edit
屏幕以及Event
屏幕(用户仅在其中查看日历事件)。我遇到的问题是,我知道如何弹出模态视图,但是是从相同的UIViewController
子类(此示例中为Edit
屏幕)发出的。
如何弹出非模式视图?
我正在考虑像通常那样弹出模式视图,然后将NSNotification
发布到“Event
”(例如)屏幕的UIViewController
子类中,并告诉它也弹出该视图。
另一件事是,对于动画,它应该是dismissModalViewControllerAnimated
动画(向下滑动),而不是popViewControllerAnimated
动画(向左滑动)。
寻找更好的解决方案,我发现this,在我的情况下不起作用(至少不能与popViewControllerAnimated
一起使用)。
最佳答案
您需要使用委托模式来通知模态“父级”它应该关闭模态视图控制器(动画:否),并将其自身弹出堆栈(动画:是)。
日历应用程序正是这种情况-确认事件删除后,只需注意导航栏标题会发生什么-在弹出该视图时,您可以看到标题迅速从“编辑”更改为“事件详细信息”退出导航堆栈。
简而言之,如果我们要谈论日历应用程序,请在您的模态视图控制器中,使用didConfirmEventDeletion
之类的方法创建一个协议:
@protocol ModalViewDelegate <NSObject>
- (void)didConfirmEventDeletion;
@end
@interface ModalViewController...
@property (nonatomic, assign) id<ModalViewDelegate> delegate;
@end
并实现:
@implementation ModalViewController
- (void)deleteEventMethod
{
...
if ([self.delegate respondsToSelector:@selector(didConfirmEventDeletion)])
[self.delegate didConfirmEventDeletion];
}
然后在您的父视图控制器中,将自己声明为模态的委托并实现
didConfirmEventDeletion
:- (void)didConfirmEventDeletion
{
[self dismissModalViewControllerAnimated:NO];
[self.navigationController popViewControllerAnimated:YES];
}
PS:当我在内存中编写这段代码时,可能会有一些错别字...
关于ios - 如何一次弹出模态视图和上一个导航 Controller View ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8108422/