2016-04-25 127 views
3

在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] 

我不能獲取標籤的價值在導航堆棧推時改變。

+0

1.你如何實例化'textController'? 2.你如何實例化'textDetail'?假設1. textController是一個UIViewController,並且2.在這兩種情況下,您剛剛在此代碼之前實例化了'textController',並且3.'textDetail'是一個IBOutlet,它不會在'textController'的初始化過程中實例化,並且在任何情況下都無法設置其文本值,因此您需要稍後在View Controller生命週期中等待。 –

+0

我添加了實例化它的代碼。第一個改變標籤的值,但第二個給我一個解包錯誤 –

+0

解包錯誤發生在哪裏?它發生在線上:'self.navigationController!.pushViewController(textController,animated:true)'?如果沒有:這兩個代碼塊是否在viewController代碼中的相同位置發生?你如何實例化'textDetail'? –

回答

2

看起來好像在調用presentViewController方法時,視圖控制器的視圖在調用期間實際加載,而在導航控制器上調用pushViewController時,視圖本身在調用後加載。

您可以通過在呈現/推送視圖控制器之前和之後打印到控制檯並在TextViewController的viewDidLoad方法中打印到控制檯來自己測試。

的觀點需要被加載的textDetail變量來加載(你有沒有這樣說,但我假設這是一個IBOutlet)和textDetail變量需要加載你能夠修改其text屬性。

要使用pushViewController例如,你可以設置一個變量對你TextViewController類,並覆蓋其viewDidLoad方法,在那裏你可以再設置在textDetail可變文本屬性。

相關問題