如何一次弹出模态视图和上一个导航控制器视图?

时间:2011-11-12 23:41:01

标签: iphone ios uinavigationcontroller modalviewcontroller pop

我在google或堆栈溢出时没有发现类似的内容...

我要做的是同时弹出模态视图和上一个视图。例如,查看日历应用。当您在“Edit”屏幕上并选择“Delete Event”时,系统会将您带回日历视图。弹出了以模拟方式显示的“Edit”屏幕以及“Event”屏幕(用户只是查看日历事件的位置)。我遇到的问题是我知道如何弹出模态视图......但是从这个示例中的UIViewController子类('Edit'屏幕),如何弹出一个视图不是模态的

我正在考虑像往常一样弹出模态视图,然后将NSNotification发布到“Event”(例如)屏幕的UIViewController子类并告诉它弹出查看。

另一件事是,对于动画,它应该是dismissModalViewControllerAnimated动画(向下滑动)而不是popViewControllerAnimated动画(向左滑动)。

感谢。

此外,寻找比this更好的解决方案,这在我的情况下不起作用(至少不适用于popViewControllerAnimated

1 个答案:

答案 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:因为我在内存中编写了这段代码,可能会有一些拼写错误...