2014-09-04 3 views
0

Я создаю два TextFields динамически и добавить их событие EditingChanged, как в следующем примереСоздание динамических UITextFields и добавление UIControlEvents.EditingChanged событий: кто звонил мне?

import UIKit 

var view:UIView = UIView() 

let inp1:UITextField = UITextField(frame: CGRect(x: 20, y: 0, width: 100, height: 44)) 

inp1.addTarget(view, action: "text_updated", forControlEvents: UIControlEvents.EditingChanged) 

let inp2:UITextField = UITextField(frame: CGRect(x: 20, y: 50, width: 100, height: 44)) 

inp2.addTarget(view, action: "text_updated", forControlEvents: UIControlEvents.EditingChanged) 


view.addSubview(inp1) 
view.addSubview(inp2) 

func text_updated(){ 
    println("who has called me?") 
} 

Как это нет никакого способа узнать, какие один из элементов управления назвало text_updated функции.

Когда я передать TextField в качестве параметра

func text_updated(sender: UITextField) { 

} 

я получаю «непризнанная селектор отправлен экземпляра» исключение.

Как можно узнать, какой TextField был изменен?

ответ

3

Разница между text_updated и text_updated: является тонкой, и довольно легко забыть ободочную кишку.

Если вы хотите вызвать func text_updated(sender: UITextField) (метод, по меньшей мере, одного параметра), вы должны установить TextField целевой селектор "text_updated:", так же, как это:

inp2.addTarget(view, action: "text_updated:", forControlEvents: UIControlEvents.EditingChanged) 

В самом деле, когда вы имеете дело с селекторы, правило простое (от this Stack Overflow answer):

двоеточие необходимо после имени метода, если и только если метод принимает аргумент.

Смежные вопросы