如何在控制器之间快速导航

时间:2020-07-13 14:01:12

标签: ios swift uinavigationcontroller

为了研究,我正在创建iPhone笔记的类似物。我想在控制器之间进行导航。有两种方法:导航控制器和当前/关闭方法。现在我用第二个。

我有三个屏幕:“笔记列表”,“观看笔记”屏幕和“编辑/制作笔记”屏幕。当我转到“ existingNote-> edit existingNote”(发生“ note list”中的“ present”,然后从“ watch-note”屏幕中出现“ present”)时,对其进行编辑并保存,执行dismiss(一次)和我的屏幕变成“手表屏幕”,没关系。但是,当我做笔记(它发生在“笔记列表”屏幕上)并保存,执行关闭时,我的屏幕变成了“笔记列表”屏幕,但是我想看“观看笔记”屏幕,想观看刚刚做的笔记

我可以通过现在/关闭来执行此操作,还是必须使用NavigationController?

2 个答案:

答案 0 :(得分:1)

使用当前/关闭:

做完笔记后,您将需要在“笔记列表”上无提示地显示“观看笔记”屏幕。这涉及两个步骤:

  1. “注释列表”屏幕应知道“注释”已被关闭。您可以在两个控制器之间传递变量,也可以使用dismissViewControllerAnimated:completion
  2. 当您了解上述内容时,请从“注释列表”中显示“观看注释”。请记住使用animated: false,否则用户将看到屏幕出现动画。

使用导航控制器:(强烈建议)

  1. 导航控制器将为您提供更大的灵活性和在控制器之间移动的能力。您可以使用navigationController.popToViewController弹出所需的控制器列表/观看/制作/添加注释。

  2. 您的代码不会混乱,并且易于维护。您无需传递变量或记住您来自哪个屏幕。您可以使用navigationController.viewControllers来了解堆栈中有哪些控制器。

答案 1 :(得分:0)

有一种方法可以识别您是否已通过导航控制器或从视图控制器中显示,即isBeingPresented

isBeingPresented在显示视图控制器时为true,在按下按钮时为false。

-(void)viewWillAppear:(BOOL)动画{

[super viewWillAppear:animated];

if ([self isBeingPresented]) {
    // being presented
    DispatchQueue.main.async() {
        self.dismiss(animated: true, completion: nil)
    }
} else if ([self isMovingToParentViewController]) {
    DispatchQueue.main.async() {
        self.navigationController?.popViewController(animated: true)
    }
}

}