我在google或堆栈溢出时没有发现类似的内容...
我要做的是同时弹出模态视图和上一个视图。例如,查看日历应用。当您在“Edit
”屏幕上并选择“Delete Event
”时,系统会将您带回日历视图。弹出了以模拟方式显示的“Edit
”屏幕以及“Event
”屏幕(用户只是查看日历事件的位置)。我遇到的问题是我知道如何弹出模态视图......但是从这个示例中的UIViewController
子类('Edit
'屏幕),如何弹出一个视图不是模态的?
我正在考虑像往常一样弹出模态视图,然后将NSNotification
发布到“Event
”(例如)屏幕的UIViewController
子类并告诉它弹出查看。
另一件事是,对于动画,它应该是dismissModalViewControllerAnimated
动画(向下滑动)而不是popViewControllerAnimated
动画(向左滑动)。
感谢。
此外,寻找比this更好的解决方案,这在我的情况下不起作用(至少不适用于popViewControllerAnimated
)
答案 0 :(得分:10)
你需要使用委托模式来通知模态“父”它应该关闭模态视图控制器(动画:否)并将其自身弹出堆栈(动画:是)。
这正是日历应用程序上发生的事情 - 只需注意当您确认删除事件时导航栏标题会发生什么 - 您可以看到标题快速从“编辑”更改为“事件详细信息”作为该视图正在从导航堆栈中弹出。
简而言之,如果我们在讨论日历应用程序时,在模态视图控制器中,使用类似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:因为我在内存中编写了这段代码,可能会有一些拼写错误...