2017-01-28 4 views
0

Требование:UITableViewCells невидимый

У меня есть список UITableviewCell загруженную из nib, что я представляю на UITableview. При первом открытии UIViewController все ячейки отображаются правильно и работают должным образом.

Выпуск:

Если я вернуться обратно к родителю, а затем откройте UIViewController снова UITableviewCell являются «невидимыми». Я говорю невидимым, потому что с точкой останова в cellForRowAt я вижу, что представление таблицы загружает все ячейки и ячейки действительны.

Код:

func numberOfSections(in tableView: UITableView) -> Int { 
    return 1 
} 
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return 13 
} 
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 
    return 40 
} 
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = (project?.sliderData.sliders[indexPath.row].view)! as UITableViewCell 
    print(cell.contentView.subviews.count) 
    if let left = cell.viewWithTag(2) as? UILabel { 
     left.text = "left" 
    } 
    if let middle = cell.viewWithTag(3) as? UILabel { 
     middle.text = "middle" 
    } 
    if let right = cell.viewWithTag(4) as? UILabel { 
     right.text = "right" 
    } 
    return cell 
} 

Screen Shot Image

enter image description here

Ожидаемое наблюдение:

Я думал, что, может быть, subviews из cells освобождаются, потому что у меня нет привязок к ним в IB. Чтобы проверить это, я печатает количество подзаголовков и написание некоторого текста на subviewlabels. И все, кажется, идет хорошо, ячейки загружены и метки есть, но клетки просто не появляются.

Но тогда, если я прокручу TableView вверх и вниз, чтобы обновить некоторые ячейки, эти ячейки появляются сверху и снизу, как показано на рис.

+0

На скриншоте видно, что только верхние и нижние ячейки загружаются, если вы прокручиваете таблицуView, но ячейки, которые находятся в середине таблицы, не видны. Правильно ли это? Пробовали ли вы вызов tableView setNeedsDisplay(), чтобы снова рисовать таблицу. –

+0

Если я просматриваю таблицу, то отображаются ячейки, которые входят в видимую область, то есть те, которые перезагружены, поэтому, отскакивая сверху, я могу получить пару видимых элементов. Я попытался добавить setNeedsDisplay() в viewDidAppear, но это не имеет никакого эффекта. – jotos

+0

Почему вы не регистрируете наконечник и не деируете ячейки обычным способом? – pbasdf

ответ

0

Не нашел причину, почему Tableview ведет себя так, как это делает, поэтому я решил эту проблему с помощью ячеек по умолчанию освобождения пакета из очереди. Представления объектов слайдера добавляются как подпункты к выделенным ячейкам. Теперь подлоги могут, конечно, быть любыми UIViews.

0

В вашем коде вам необходимо позвонить dequeueReusableCell(withIdentifier: "cell"), а затем отобразит вашу ячейку таблицы. Он будет повторно использовать ячейку для всех ваших номеров содержимого строк.

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

Подробнее: How to create uitableview with multiple sections in iOS Swift.