2016-12-09 3 views
0

В моей UITableView Я много клеток, созданных, как это:Target автоматически вызывается в cellForRowAtIndexPath

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCellWithIdentifier("cell")! as UITableViewCell 
    let btn = cell.viewWithTag(1001) as! UIButton 
    btn.tag = indexPath.row 
    btn.addTarget(cell, action: Selector(myFunc(btn)), forControlEvents: .TouchUpInside) 

... 
} 

Я не могу понять, почему MyFunc() вызывается автоматически, когда UITableView заполняется. (Не касаясь каких-либо кнопок)

+0

Какую версию Swift вы используете? –

+0

Я использую Swift 2.2 –

+0

Попробуйте переместить свой метод 'btn action' на didSelectRowAtIndexPath? – Joe

ответ

0

Изменить addTarget метод что-то вроде этого

btn.addTarget(self, action:#selector(myFunc(_:)), forControlEvents: .TouchUpInside) 
+0

Я не могу понять, почему, но он работает –

+0

PS: Можете ли вы сказать мне, почему? –

+0

myFunc (_ :) указывает имя функции и имеет параметр. И сам должен использоваться для указания способа определения метода. –

0

Потому что вы дали цель функции в клетке, поэтому целевой вызов автоматически в cellRowAtIndexPath, не касаясь любой кнопки. Сначала вы удаляете ячейку из цели и записываете себя. Он говорит, что функция объявляет тот же класс. Если вы обращаетесь к функции из любого другого класса, напишите имя класса.

btn.addTarget(self, action: Selector(myFunc(btn)), forControlEvents: .TouchUpInside) 
Смежные вопросы