我有三个ViewControllers和一个导航控制器。导航堆栈是:
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将segue转换为VC2并显示新项目的属性。我希望这个segue对用户来说是隐形的,所以,他只看到这一系列事件:
按下按钮"添加" - >模态VC出现 - >按下"完成" - >模态VC消失,VC3已经显示。
我要问的是如何告诉VC1用户按下按钮"完成"?代表团可以在这里吗?怎么实现呢?谢谢。
答案 0 :(得分:1)
您应该创建一个委托协议,允许模态视图控制器向其创建者发送通知。
@protocol ModalViewControllerDelegate
@optional
- (void)modalViewControllerDidCancel:(ModalViewController *)vc;
- (BOOL)modalViewControllerShouldSave:(ModalViewController *)vc;
@end
然后,在ModalViewController
中定义一个新属性。 weak
很重要,因为您不希望有任何保留周期。
@property (nonatomic, weak) id <ModalViewControllerDelegate> delegate;
在解雇或保存之前,只需检查委托是否已实施方法(通过-respondsToSelector:
)并发送相应的回调。在创建模态视图控制器时,不要忘记设置委托属性。