разная высота ячейки в табличном представлении … iphone

#iphone #ios

#iPhone #iOS

Вопрос:

я новый программист приложения для Iphone ….. мне нужны три ячейки в таблице (разной высоты)

я пишу код для этой задачи .. и результат удовлетворительный …… но я не знаю .. это правильный метод или нет…..

заранее спасибо ….. 🙂

 CGRect frame=CGRectMake(5, 43, 311, 363);

UITableView *table=[[UITableView alloc]initWithFrame:frame style:UITableViewStylePlain];

table.dataSource=self;

table.delegate=self;



-(CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath: (NSIndexPath *)indexPath
{
    static int counter=1;

    if(counter==1)
    {
        counter=counter  1;
        return 163;

    }
    else if(counter ==2)
    {
        counter=counter  1;
        return 80;

    }
    else 
    {
        counter=counter  1;
        return 60;

    }
    if(counter==4)
    {
        counter=1;
    }

}
 

Ответ №1:

Нет, это неправильно. Используйте indexPath.row вместо вашей counter переменной. Это будет номер строки, о котором запрашивается ваш делегат. Например, при прокрутке вверх вы можете не получить ожидаемые результаты с вашим текущим кодом.

Ответ №2:

Не используйте

 static int counter=1;
 

Получить row из NSIndexPath.

 int row = indexPath.row;
 

Ответ №3:

ваша static int counter переменная не является глобальной, поэтому ваш код не может работать. Это сработало бы, если бы вы создали из него ivar, но это неправильный способ решить эту проблему. indexPath Переменная, предоставляемая методом heightForRowAtIndexPath: делегирования, содержит индекс фактического элемента. Просто вызовите indexPath.row (это фактический счетчик) в своем коде вместо вашего счетчика.

Ответ №4:

Из вашего кода я предполагаю, что у вас есть поворот на высоту 3 строки, поэтому лучший способ использовать int row = indexPath.row % 3; это даст вам циклическое значение 0,1,2 в качестве значения для тестирования вместо вашего счетчика

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

1. в любом случае есть лучший способ справиться со всей «проблемой высоты», возможно, используя массив с плавающей точкой для хранения разных значений.