#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. в любом случае есть лучший способ справиться со всей «проблемой высоты», возможно, используя массив с плавающей точкой для хранения разных значений.