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

jbo*_*ook 2 iphone uinavigationcontroller modalviewcontroller ios

我还没有在谷歌或堆栈溢出上找到类似的东西......

我想要做的是同时弹出模态视图和前一个视图.例如,查看日历应用.当您在Edit"屏幕上并选择Delete Event"时,您将被带回日历视图.在" Edit"画面,将其模态呈现弹出以及所述的" Event"画面(其中用户被刚刚观看日历事件).我遇到的问题是我知道如何弹出模态视图......但是从同一UIViewController个子类(Edit本例中的"屏幕")中,如何弹出一个非模态的视图

我正在考虑像往常一样弹出模态视图,然后发布NSNotification到' Event'(例如)屏幕的UIViewController子类并告诉它也弹出该视图.

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

谢谢.

另外,寻找比更好的解决方案,这在我的情况下不起作用(至少没有popViewControllerAnimated)

Rog*_*Rog 10

您需要使用委托模式来通知模态"父"它应该关闭模态视图控制器(动画:否)并将其自身弹出堆栈(动画:是).

这正是日历应用程序上发生的事情 - 只需注意当您确认删除事件时导航栏标题会发生什么 - 您可以看到标题快速从"编辑"更改为"事件详细信息",因为该视图正在弹出离开导航堆栈.

简而言之,如果我们在讨论日历应用程序时,在模态视图控制器中,使用以下方法创建协议didConfirmEventDeletion:

@protocol ModalViewDelegate <NSObject>
- (void)didConfirmEventDeletion;
@end

@interface ModalViewController...

@property (nonatomic, assign) id<ModalViewDelegate> delegate;

@end     
Run Code Online (Sandbox Code Playgroud)

并实施:

@implementation ModalViewController

- (void)deleteEventMethod
{
    ...
    if ([self.delegate respondsToSelector:@selector(didConfirmEventDeletion)])
         [self.delegate didConfirmEventDeletion];
}
Run Code Online (Sandbox Code Playgroud)

然后在父视图控制器中,将自己声明为模态的委托并实现didConfirmEventDeletion:

- (void)didConfirmEventDeletion
{
    [self dismissModalViewControllerAnimated:NO];
    [self.navigationController popViewControllerAnimated:YES];
}
Run Code Online (Sandbox Code Playgroud)

PS:可能有一些拼写错误,因为我在内存中编写了这段代码...