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
变量上。
在 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
变量上。