2016-08-01 30 views
1

我有兩個視圖控制器:ViewController1和ViewController2。 我的目標是,如果在ViewController1中某個條件滿足時,觸發segue,那麼viewController2中的文本字段將被禁用。禁用目標視圖控制器中的文本字段

我已經設置shouldPerformSegueWithIdentifierprepareForSegue和一切工作正常,但是當我把它的條件崩潰說,它發現一個錯誤解開可選的文本字段。 我ViewController1是:

override func shouldPerformSegueWithIdentifier(identifier: String, sender: AnyObject!) -> Bool { 
    if condition1=true{ 
     return true 
    } 
    else{ 
     return false 
    } 
} 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) { 
    if (segue.identifier=="segue"){ 
     let destVC:ViewController=segue.destinationViewController as! ViewController2 
     if n==1{ 
      destVC.myTextField.enabled=false 
     } 
    } 
} 

回答

2

prepareForSegue方法ViewController2myTextField尚未初始化,所以這就是爲什麼你得到一個錯誤unwrapping an optional textField,爲您解決崩潰創建一個Bool比如你ViewController2內部和prepareForSegue方法傳遞它的價值。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) { 
    if (segue.identifier=="segue"){ 
      let destVC:ViewController=segue.destinationViewController as! ViewController2 
      if n==1{ 
       destVC.isEnabled=false 
      } 
    } 
} 

ViewController2這樣創建實例isEnabled,並用它在viewDidLoadViewController2

var isEnabled: Bool = true 

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.myTextField.enabled = self.isEnabled 
} 
+0

非常感謝Nirav,就像一個魅力! – user440309

+0

歡迎,快樂編碼:) –

+0

還有一個問題,如果我想讓isEnabled值保持假,直到n值被更改,會發生什麼?我的意思是,如果我去一個不同的viewController或我關閉了應用程序它恢復到原來的..我應該存儲在nsuserdefaults的值? – user440309

0

與目的地控制器相關的意見尚未加載/在這一點上實例化。

在目標VC上創建一個實例布爾標誌,並將其設置在prepare segue函數中。然後在目標VC的viewDidLoad或更高版本中檢查該開關並禁用文本字段。

0

您可以在您的目的地視圖控制器設置的條件,那麼你可以做到這一點

myTextField.userInteractionEnabled = false 

啓用和禁用文本框的userInteractionEnabled。

相關問題