2017-02-15 3 views
1

У меня есть вопрос о порядке коды выполнения с cellForRowAtкода в cellForRowAt вызываться после кода в классе ячейки

Это моя cellForRowAt функцией

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath) as! MyTableViewCell 
    print(1) 
    return cell 
} 

Это мой код в моем MyTableViewCell.swift

override init(style: UITableViewCellStyle, reuseIdentifier: String?) { 
    super.init(style: style, reuseIdentifier: reuseIdentifier) 

    print(2) 
} 

Когда я запускаю свой код. Журнал консоли печати этот результат

2 
1 

Итак, мой код в классе моей ячейки выполняется до кода в cellForRowAt.

Но, я хочу, чтобы мой код в классе моей ячейки запускался после кода в cellForRowAt. Я хочу, чтобы результат как это:

1 
2 

Как я могу сделать, как это?

ответ

1

в вашем добавить функцию:

func doMyStuff() { 
    print(2) 
} 

обратно к вашему cellForRowAtIndexPath:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath) as! MyTableViewCell 
    print(1) 
    cell.doMyStuff() 
    return cell 
} 
+0

Спасибо. Это то, что мне нужно! –

0

Попробуйте сделать этот материал не в функции инициализации, но в awakeFromNib

override func awakeFromNib(){ 
super.awakeFromNib() 
//stuff 
} 
+0

Я использую tableView.dequeueReusableCell для создания tableViewCell не из IB так awakeFromNib не будет работать :( –

+0

Я вижу, что вы используете * MyTableViewCell *. Ну, в этом классе вы переопределите awakeFromNib. Это, конечно, если MyTableViewCell наследует от TableViewCell –

+0

Но я не использую IB для создания TableView. Я создаю TableView программно, так что мне нужно использовать init (style: reuseIdentifier) ​​вместо использования awakeFromNib() –

0

Вы можете создать пользовательский класс клеток с техническими характеристиками стиля, а затем, когда вы инстанцируете ячейку в cellForRowAtIndexPath вы можете использовать пользовательский класс ячейки. Так, что-то вроде этого:

myCell = tableView.dequeueReusableCellWithIdentifier("topicCell") as!  topicTableViewCell 

Где topicTableViewCell ваш собственный UITableViewCell класс