繁体   English   中英

对模态ViewController被解雇做出反应

[英]React on Modal ViewController being dismissed

我有三个ViewController和一个导航控制器。 导航堆栈为:
NavigationController-推> VC1,推> VC2。 VC1可以以代码形式形式呈现VC3。 它没有通过segues连接。
VC1-“您当前的项目”
VC2-“您的项目的详细信息”
VC3-“创建新项目”

当用户希望创建一个新项目时,我使用以下命令放置了VC3:

- (IBAction)newProjectButton:(id)sender {
    NewProjectViewController *newProject = [[NewProjectViewController alloc] init];
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:newProject];
    [self presentViewController:navController animated:YES completion:nil];
}

我用户按下“取消”按钮,我使用此代码:

- (IBAction)cancelButton:(id)sender {
    [self dismissViewControllerAnimated:YES completion:nil];
}

当用户按下“完成”按钮时,我希望VC1切换到VC2并显示新项目的属性。 我希望用户无法看到此序列,因此,他只看到以下事件链:
按下按钮“添加”->模态VC出现->按下“完成”->模态VC消失并且VC3已经显示。

我要问的是如何告诉VC1用户按下了“完成”按钮? 这里可以委托吗? 如何执行呢? 谢谢。

您应该创建一个委托协议,该协议允许模态视图控制器向其创建者发送通知。

@protocol ModalViewControllerDelegate
@optional
- (void)modalViewControllerDidCancel:(ModalViewController *)vc;
- (BOOL)modalViewControllerShouldSave:(ModalViewController *)vc;
@end

然后,在ModalViewController定义一个新属性。 weak很重要,因为您不想有任何保留周期。

@property (nonatomic, weak) id <ModalViewControllerDelegate> delegate;

在关闭或保存之前,只需检查委托是否已实现方法(通过-respondsToSelector:并发送适当的回调。 创建模态视图控制器时,请不要忘记设置委托属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM