2016-12-17 39 views
0

通常,每次更改UITextField時都要抓取文本,只需從故事板文件中拖出一個IBOutlet,然後選擇「編輯已更改」選項。以編程方式在UIAlertController中獲取更改的textField

但是,我想抓住UIAlertController中的UITextField的文本,所以文本字段是以編程方式創建的,而不是通過故事板創建的。

如何以編程方式創建每當文本字段(在警報窗口中)發生更改時運行的函數?

我需要什麼:

func textHasChanged(textField: TextField) { 
    print(textField.text) 
} 

如果輸入的是 「貓」 所需輸出要求是:

「C」

「CA」

「貓」

我該如何實現這一目標?

注:我試着做.addtarget方法:

textField.addTarget(self, action: Selector(self.textFieldDidChange(_:)), for: UIControlEvents.editingChanged) 

在同一個文件中的此功能:

func textFieldDidChange(txtField: UITextField) 

但我不斷收到此錯誤: 值類型的「我的viewcontroller的名稱「沒有成員」textFieldDidChange「

我查了這個問題,但大多數給我過時的答案。謝謝!

+0

那是因爲你沒有問當前類通過設置委託做的工作。 –

回答

0

試試這個:

@IBAction func displayAlert(_ sender : AnyObject) { 
    let alertController = UIAlertController(title: "Enter some text", message: "Please enter some text in the field below", preferredStyle: .alert) 
    alertController.addTextField() 
    alertController.addAction(UIAlertAction(title: "OK", style: .default) { action in 
     print("User pressed OK") 
    }) 
    alertController.addAction(UIAlertAction(title: "Cancel", style: .cancel) { action in 
     print("User pressed Cancel") 
    }) 


    if let textField = alertController.textFields?.first { 
     textField.addTarget(self, action: #selector(ViewController.textHasChanged), for: .editingChanged) 
    } 
    self.present(alertController, animated: true) 
}