navigationController!.pushViewController与iOS中的presentViewController Swift
问题描述:
在UINavigation中推送ViewController与在下一个视图中更改值方面呈现ViewController的含义有什么关系?navigationController!.pushViewController与iOS中的presentViewController Swift
例如,为什么第一个工作但不是第二个?
第一:
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
可变文本属性。
1.你如何实例化'textController'? 2.你如何实例化'textDetail'?假设1. textController是一个UIViewController,并且2.在这两种情况下,您刚刚在此代码之前实例化了'textController',并且3.'textDetail'是一个IBOutlet,它不会在'textController'的初始化过程中实例化,并且在任何情况下都无法设置其文本值,因此您需要稍后在View Controller生命周期中等待。 –
我添加了实例化它的代码。第一个改变标签的值,但第二个给我一个解包错误 –
解包错误发生在哪里?它发生在线上:'self.navigationController!.pushViewController(textController,animated:true)'?如果没有:这两个代码块是否在viewController代码中的相同位置发生?你如何实例化'textDetail'? –