Высота ячеек в разных таблицах в 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;
}
Другие вопросы по тегам