首页 文章

对Modal ViewController的反应被解雇

提问于
浏览
1

我有三个ViewControllers和一个导航控制器 . 导航堆栈是:
NavigationController-推> VC1,推> VC2 . VC1可以在代码中以模态方式呈现VC3 . 它没有通过segues连接 .
VC1 - "Your current projects"
VC2 - "Details of your project"
VC3 - "Create new project"

当用户想要创建一个新项目时,我使用了一个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];
}

当用户按下"Done"按钮时,我希望VC1将segue转换为VC2并显示新项目的属性 . 我希望这个segue对用户来说是隐形的,所以,他只看到这一系列事件:
按下按钮"add" - >模态VC出现 - >按"Done" - >模态VC消失,VC3已经显示 .

我问的是如何告诉VC1用户按下按钮“完成”?代表团可以在这里吗?怎么实现呢?谢谢 .

1 回答

  • 1

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

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

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

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

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

相关问题