Страницы

Поиск по вопросам

вторник, 17 марта 2020 г.

Вопрос про UITableView и UITableViewCell в iOS

#ios #uitableview


Доброе время суток коллеги!
Столкнулся с такой задачей. Необходимо выводить информацию в UITableView в два кастомных
UITableViewCell. верхний как бы заголовок, нижний текст с произвольной высотой. Если
кликать на заголовок необходимо попадать на профиль пользователя, если кликать на текст
попадать на полный текст статьи. Пример реализации которая мне нужна хорошо выполнен
в приложении ВКонтакте для iphone, в разделе группы. У меня не получается вывести данные
в два UITableViewCell по очереди. 
https://www.dropbox.com/s/g1g6btk4zudrhr1/screen.pdf
В приложенном файле я нарисовал прототип того как должен выглядеть табличный вид
на мобильном телефоне. 
Если кто сталкивался или знает как это можно реализовать прощу помочь.    


Ответы

Ответ 1



После обсуждения этого вопроса с его автором в скайпе мы совместно выяснили, что оба вида ячеек на самом деле относятся к одной сущности (пользователю и контенту, связанному с ним) и решили, что нужно, чтобы был создан только один тип ячейки, в которую контент нынешних двух типов ячейки войдет в виде двух subviews - один subview для заголовка ячейки (информация о пользователе), другой - для контента (сообщение пользователя). Главная же проблема скрывалась в том, что из-за наличия двух видов ячеек, автор, полагаясь на строку вида EXHeaderTableCell *headerCell = [tableView dequeueReusableCellWithIdentifier:HeaderCellIdentifier forIndexPath:indexPath]; получал неправильное обращение к индексу в массиве Reusable cells, так как indexPath в большинстве случаев указывал на ячейку противоположного типа.

Ответ 2



- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellPersonIdentifier = @"CellPersonIdentifier"; static NSString *CellDataIdentifier = @"CellDataIdentifier"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:(indexPath.row % 2 == 0 ? CellPersonIdentifier : CellDataIdentifier)]; if (cell == nil) { NSArray *nib = [[NSBundle mainBundle] loadNibNamed:(indexPath.row % 2 == 0 ? @"CellPerson" : @"CellData") owner:self options:nil]; cell = [nib objectAtIndex:0]; } // далее заполняешь ячейки данными }

Комментариев нет:

Отправить комментарий