2016-08-15 2 views
0

У меня есть контроллер табличного представления, который необходимо обновить через вызов делегата. Я установил источник данных и делегат, а при начальной загрузке tableview все работает так, как ожидалось. У меня есть метод делегата, который вызывается после обновления источника данных. Делегат вызывает метод обновления в классе контроллера табличного представления, который вызывает .reloadData()cellForRowAtIndexPath не вызывается после reloadData

Когда вызывается reloadData, вызывается numberOfRowsInSection и точно возвращает количество строк, однако cellForRowAtIndexPath никогда не вызывается.

В этом конкретном случае numberOfRowsInSection возвращает 2, поэтому cellForRowAtIndexPath следует вызывать дважды, но он называется нулевым временем.

При начальной загрузке все в порядке. Только когда reloadData называется taht cellForRowAtIndexPath игнорируется. Я делал то же самое много раз в Obj-C без каких-либо странностей. Есть ли какие-либо известные проблемы с этим в Swift?

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

    let cell = tableView.dequeueReusableCellWithIdentifier(LayerMenuCell.reuseId) as! LayerMenuCell 
    // .... 
    return cell 
} 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    print(layerEntries?.count) 
    return (layerEntries?.count)! 
} 

func refresh() { 
    self.layersTableView.reloadData() 
} 

Спасибо!

+0

Вы можете поделиться кодом? –

+0

Смотрите сообщение для кода. Код никогда не входит в cellForRow ... когда вызывается reloadData, хотя numberOfRowsInSections возвращает точный номер, который НЕ равен – Pheepster

+0

Проверьте, используете ли вы 'numberOfSectionsInTableView' и убедитесь, что он не возвращает ZERO. – Aziz

ответ

4

delegate установки и dataSource из ваших UITableView Try:

myTable.delegate = self 
myTable.dataSource = self 
+0

Оба установлены. Как я упоминал в сообщении, при загрузке таблицы загружаются без проблем. Этого не произойдет, если datasource/delegate еще не установлены. В моем случае вызывается numberOfRowsInSection, что не было бы так, если бы источник данных/делегаты не были установлены – Pheepster

-2

Вещи, которые вы должны проверить, когда Tableview не работает, как ожидалось:
1. Установка делегата и источник данных через раскадровки или кодом.

self.tableView.delegate = self 
self.tableView.dataSource = self 

2.check, если tableView в раскадровке подключен к выходу tableView.
3.check numberOfRowsInSection и numberOfSectionsInT ableView, возвращающий правильные значения.
4.check, если методы написаны правильно.
5.add делегат и источник данных после UIViewController.

<UITableViewDelegate , UITableViewDataSource> 

это поможет вам, если вам не хватает какой-либо вещи.

+0

Опять же, если делегат не был правильно установлен, numberOfRowsInSection не будет вызываться, но это так. Единственный метод делегата tableview, который НЕ вызывается, - cellForRowAtIndexPath. – Pheepster

+0

Тот же ответ уже опубликован. – penatheboss

0

Как указано в документации:

Вид функционирование таблица требует три источников данных представления таблицы методы.

func numberOfSectionsInTableView(tableView: UITableView) -> Int 
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 

MAake, что вы реализуете выше трех методов делегата, и они возвращают некоторые значения, отличные от нуля или 0.

Существует вероятность того, что высота ячейки может быть 0/высота стола в обоих 0 случай cell для метода row не будет вызван.

Также убедитесь, что вы правильно установили делегат и вызвали метод reloadData в основном потоке. Больше на here

+0

Как уже упоминалось в моих других комментариях, все эти функции возвращаются точно. Даже жесткое кодирование значений не влияет. Кроме того, если эти методы были неправильно реализованы, представление таблицы не будет работать при начальной загрузке, но оно работает при начальной загрузке. Это происходит только при вызове reloadData. – Pheepster

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