如何一次性popup模式视图和以前的导航控制器视图?
我还没有发现任何类似于谷歌或堆栈溢出…
我想要做的是同时popup一个模态视图和前一个视图。 例如,查看日历应用程序。 当你在“ Edit
”屏幕上,select“ Delete Event
”,你将被带回日历视图。 popup的“ Edit
”屏幕以及“ Event
”屏幕(用户正在查看日历事件)。 我遇到的问题是,我知道如何popup一个模态视图…但是从同一个UIViewController
子类(本例中的“ Edit
”屏幕), 如何popup一个不是模态的视图 ?
我正在考虑像通常那样popup模态视图,然后将“ NSNotification
”发布到“ Event
”(例如)屏幕的UIViewController
子类,并告诉它popup该视图。
另一件事是animation,它应该是dismissModalViewControllerAnimated
animation(向下滑动),而不是popViewControllerAnimated
animation(向左滑动)。
谢谢。
另外,寻找一个比这更好的解决scheme,这不工作在我的情况(至less不是与popViewControllerAnimated
)
您需要使用委托模式来通知模式“父”,它应该closures模式视图控制器(animation:NO),并从堆栈中popup自己(animation:是)。
这正是在日历应用程序上发生的事情 – 只要注意确认删除事件时导航栏标题会发生什么情况 – 您可以看到标题从“编辑”快速更改为“事件详细信息”,因为该视图正在popup离开导航堆栈。
所以简而言之,如果我们正在讨论日历应用程序,请在您的模式视图控制器中使用didConfirmEventDeletion
方法创build一个协议:
@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:可能会有一些错别字,因为我从存储器中写下这些代码。