2016-12-17 1 views
0

Как правило, чтобы каждый раз, когда он был изменен, текст UITextField, чтобы перетащить IBOutlet из файла Storyboard и выберите вариант «edit changed».Программно захватить изменяющийся текстField в UIAlertController

Однако я хочу захватить текст UITextField в UIAlertController, поэтому текстовое поле создается программно, а не через раскадровку.

Как программно создать функцию, которая запускается каждый раз, когда текстовое поле (в окне предупреждения) изменилось?

Что мне нужно:

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

Если вход "кошка" Необходим выход должен быть:

"с"

"ча"

"кошка"

Как я могу это достичь?

Примечание: Я пытался делать .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) 
} 
Смежные вопросы