iOS Swift 中的 navigationController!.pushViewController 与 presentViewController

navigationController!.pushViewController vs. presentViewController in iOS Swift

在 UINavigation 中推送 ViewController 与在下一个视图中以更改值的形式呈现 ViewController 有什么含义?

例如,为什么第一个有效而第二个无效?

第一个:

var textController: TextViewController
textController = self.storyboard!.instantiateViewControllerWithIdentifier("TextViewController") as! TextViewController
presentViewController(textController, animated: false, completion: nil)
textController.textDetail.text = Categories[indexPath.row]

第二个:

var textController: TextViewController
textController = self.storyboard!.instantiateViewControllerWithIdentifier("TextViewController") as! TextViewController
self.navigationController!.pushViewController(textController,animated:true)
textController.textDetail.text = Categories[indexPath.row]

推入导航堆栈时无法更改标签的值。

看起来好像在调用presentViewController方法时,视图控制器的视图实际上是在调用期间加载的,而在导航控制器上调用pushViewController时,视图本身是调用后加载。

您可以通过在 presenting/pushing 视图控制器之前和之后打印到控制台以及在 TextViewController 的 viewDidLoad 方法中打印到控制台来自行测试。

需要加载视图才能加载 textDetail 变量(你没有这么说,但我假设这是一个 IBOutlet)并且需要加载 textDetail 变量以便您能够修改其 text 属性。

要使用 pushViewController,您可以在 TextViewController class 上设置一个变量,并覆盖其 viewDidLoad 方法,然后您可以在其中设置文本 属性 在 textDetail 变量上。