2015-08-31 3 views
4

Я работал вокруг tableview и застрял в следующей проблеме.willDisplayCell делегат метод Swift

Насколько я понимаю метод делегата willDisplayCell должен позволить мне получить доступ к текущей конструкции ячеек.
Моя проблема - я не могу получить доступ к экземпляру пользовательской ячейки, поскольку она была объявлена ​​отдельно в методе cellForRowAtIndexPath. И если я объявлю это снова - я не могу получить доступ к его объектам (у меня есть uibutton). Или, может быть, я не понимаю использование этого метода.

Вот мой код

func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) { 

//declaring the cell variable again 

    var cell:TblCell = self.tableView.dequeueReusableCellWithIdentifier("cell") as! TblCell 

    if let text = cell.lblCarName.text where !text.isEmpty { 
     cell.act1.hidden = false 
    } else { 
     println("Failed") 
    } 
} 

Моя цель, как это видно в коде, чтобы получить доступ к TblCell uilabel и применить условное к нему - если его ноль - показать uibutton.

NB: Мой делегат и источник данных установлены правильно, метод запущен, приложение компилируется, но условные выражения не работают, как я их намеревался.

Спасибо!

+0

Мне интересно, почему вы не можете сделать это в 'cellForRowAtIndexPath'? – donnywals

ответ

6

Этот делегат дает вам экземпляр ячейки, которая теперь будет показана, и эта конкретная ячейка фактически отправлена ​​в качестве параметра cell. Typecast это и использовать условное.

Попробуйте этот код вместо этого.

var cell:TblCell = cell as! TblCell 

if let text = cell.lblCarName.text where !text.isEmpty { 
    cell.act1.hidden = false 
} else { 
    println("Failed") 
} 
+0

Спасибо, это очень хорошая идея. Пробовал это, но в результате uibutton становится видимым на каждой клетке, кроме последней - где текст uilabel фактически равен нулю. Так оно должно работать? Поскольку я ожидал противоположного результата ( –

+0

, если вы просто хотите скрыть cell.act1, вы можете просто сделать это в 'cellForRowAtIndexPath', не так ли? –

+0

попытался применить тот же условный аргумент в' cellForRowAtIndexPath'. результат - uibutton отображается во всех ячейках, кроме последнего. –

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