2015-10-14 84 views
1

的值时,这是我的代码赛格瑞准备迅速零设置文本字段

switch segue.identifier! { 
     case SegueIdentifiers.SecondUIViewController.rawValue: 
      print("\(SegueIdentifiers.SecondUIViewController.rawValue)") 
      let secondViewController = segue.destinationViewController as? SecondViewController 

      secondViewController!.resultTextField.text = "asdfasdf" 
      //break 
     default: 
      print("nothing sweetheart") 
      break 
     } 

我得到了这条线

secondViewController!.resultTextField.text = "asdfasdf" 

为什么无异常?文本字段已经存在

这是第二个视图控制器

import UIKit 

class SecondViewController: UIViewController { 

    @IBOutlet weak var resultTextField: UITextField! 
    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 
} 
+0

你把你的文本字段绑定到IB的出口吗? –

+0

你有没有调试过,设置断点并检查值? 'secondViewController'为零还是'resultTextField'为零?至少有一半的开发代码正在以某种形式进行调试,需要获得该技能。 – zaph

+2

使用prepareForSegue方法时,[IBOutlet属性不会更新]的可能重复(http://stackoverflow.com/questions/8033924/iboutlet-properties-does-not-update-when-using-prepareforsegue-method) – dan

回答

3

outlets未设置直到viewDidLoad。在此之前,他们都是nil。这就是为什么他们是可选项。因此,当您尝试从prepareForSegue访问它们时,它们仍然是nil

我建议你添加一个新的属性到你的视图控制器,并从prepareForSegue设置。稍后当您设置outlets时,您可以更新您的文本字段。

// in prepareForSegue 
let secondViewController = segue.destinationViewController as? SecondViewController 
secondViewController!.resultText = "asdfasdf" 

,然后在视图控制器

class SecondViewController: UIViewController { 
    var resultText: String = "" { 
     didSet { 
      resultTextField?.text = text 
     } 
    } 

    @IBOutlet weak var resultTextField: UITextField! { 
     // Will be set once in viewDidLoad. 
     // Whenever that happens update text. 
     didSet { 
      resultTextField.text = resultText 
     } 
    } 
} 

现在你可以从outlets设置甚至在resultText属性修改文本字段,并设置感谢didSet财产时,他们会被更新观察者。