navigationController!.pushViewController vs. presentViewCont



在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时,视图本身是在调用后加载的。

您可以通过在演示/推送视图控制器之前和之后打印到控制台,并在 TextViewController 的 viewDidLoad 方法中打印到控制台来自己测试这一点。

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

例如,要使用pushViewController,您可以在TextViewController类上设置一个变量,并重写其viewDidLoad方法,然后您可以在textDetail变量上设置 text 属性。

最新更新