我想同时弹出一个模式视图和上一个视图。例如,查看日历应用程序。当我在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/

10-13 04:34