对Modal ViewController的反应被解雇

时间:2014-07-27 14:24:15

标签: ios objective-c uiviewcontroller uinavigationcontroller delegates

我有三个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用户按下按钮"完成"?代表团可以在这里吗?怎么实现呢?谢谢。

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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