如何在控制器之间导航,swift

How to navigate between controllers, swift

我正在模拟 iphone 的笔记以供学习。我想在控制器之间进行导航。并且有两种方法:导航控制器和 present/dismiss 方法。现在我用第二个。

我有三个屏幕:“笔记列表”、“手表笔记”屏幕和“edit/make-note”屏幕。当我转到“existingNote -> edit existingNote”(从“note 列表”出现“present”,然后从“watch-note”屏幕出现“present”),编辑并保存,执行 dismiss(一次)和我的屏幕变成了“watch-note screen”,就ok了。但是当我做笔记(它发生在“笔记列表”屏幕上)并保存时,执行关闭并且我的屏幕变成了“笔记列表”屏幕,但我想看到“手表笔记”屏幕,想看刚刚做的笔记.

我可以通过 present/dismiss 完成还是必须使用 NavigationController?

有一种方法可以识别您是通过导航控制器推送还是从视图控制器呈现,即isBeingPresented

isBeingPresented 在显示视图控制器时为真,在推送时为假。

-(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)
    }
}

}

使用present/dismiss:

您需要在做笔记后在“笔记列表”上静默显示“观察笔记”屏幕。这涉及两个步骤:

  1. “笔记列表”屏幕应该知道“做笔记”正在被关闭。您可以在两个控制器之间传递变量或使用 dismissViewControllerAnimated:completion
  2. 知道以上内容后,出示“笔记列表”中的“观察笔记”。请记住使用 animated: false 否则用户将看到屏幕出现动画。

使用导航控制器:(强烈推荐)

  1. 导航控制器将为您提供更大的灵活性和在控制器之间移动的能力。您可以使用 navigationController.popToViewController 弹出所需的控制器 list/watch/make/add 音符。

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