Высота ячеек в разных таблицах в iOS
На мой взгляд, у меня есть три разных стола. Для первых двух таблиц у меня есть фиксированная высота для каждой ячейки (например, 30.0f для каждой ячейки первой таблицы и 45.0f для каждой ячейки второй таблицы), которую я скорректировал в раскадровке в соответствии с данными в каждой таблице. Для третьей таблицы я хочу иметь разную высоту для каждой ячейки. Я попробовал метод
(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
Но проблема этого метода в том, что этот метод вызывается для каждой таблицы. Что касается первых двух таблиц, я отрегулировал высоту в раскадровке, я не знаю, что с ними делать. И если я сделаю:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
if(tableView == myTable) {
return 150.0;
}
}
Поскольку мне нечего возвращать в остальных случаях, все это не удается. Любое предложение?
3 ответа
Вам нужно вернуть высоту для других таблиц.
Если вы установили высоту в раскадровке, вы можете получить доступ к этой высоте следующим образом:
-(CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (tableView == myTable)
return 150.0;
return tableView.rowHeight;
}
tableView.rowHeight будет высотой, которую вы установили в раскадровке
Вы должны заставить свой контроллер представления делегировать все 3 представления таблицы и в heightForRowAtIndexPath проверить, какая таблица вызвала метод:
Итак, в viewDidLoad добавьте:
myTable1.delegate = self;
myTable2.delegate = self;
myTable3.delegate = self;
а потом:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
if(tableView == myTable1) {
return 150.0;
}
else if(tableView == myTable2) {
return 75.0;
}
else if(tableView == myTable3) {
return 75.0;
}
}
Как насчет использования свойства тега? Установите тег для каждой таблицы на уникальный номер, а затем верните высоту, как это:
- (CGFloat) tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
if (tableView.tag == 1)
{
return 150;
}
return 250;
}