Создать сетку в iphone - PullRequest
1 голос
/ 04 июля 2011

Я хочу создать табличное представление, в котором я хочу показать некоторые элементы или изображения (4 элемента в строке). Например: если у меня есть 7 изображений, я хочу показать 4 в первой строке и 3 в следующей строке, и если у меня есть 13 изображений, то он должен отображаться как 4,4,4,1 в строках 1,2,3,4 соответственно. Я достиг этого, но моя проблема в том, что эти изображения продолжают менять свою позицию (смещение с 1 на 3 строки и наоборот), когда я прокручиваю вид таблицы. Пожалуйста, скажите мне, как мои изображения автоматически подстраиваются под 4 строки подряд и не повторяются, если я прокручиваю представление таблицы.

Мой код:

(array has 7 image-datas stored in it) 


- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    return 93;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    return [array count];
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{



    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Avi"];

    for (UIView *view in cell.contentView.subviews) {
        [view removeFromSuperview];
    }
    if (cell == nil)
    {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Avi"] autorelease];
        cell.backgroundColor = [UIColor clearColor];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;

    }


    NSData *imageData;


        for(int i=0;i<4;i++){

        imageData=[array objectAtIndex:indexpath.row];

        UIButton *Button = [UIButton buttonWithType:UIButtonTypeCustom];
        Button.frame = CGRectMake(5+(i*77), 5, 77,85);
        [Button setBackgroundImage:[UIImage imageWithData:imageData] forState:UIControlStateNormal];


        [cell.contentView addSubview:Button];


    }

return cell;

1 Ответ

1 голос
/ 04 июля 2011

Так что фрагмент кода, который вы разместили, не особенно полезен, но это почти наверняка случай неправильной переработки ячеек табличного представления.

Табличные представления «перерабатывают» свои ячейки для эффективности и производительности - когда ячейка прокручивается вне поля зрения, она помечается для повторного использования: когда вы в следующий раз запросите новую ячейку, вам будет предоставлена ​​переработанная ячейка, если она имеется (в противном случае новая ячейка будет создана).

Если все ваши ячейки используют одинаковый макет, это не проблема. Однако, если вы отрегулируете расположение ваших ячеек (как и вы), это может вызвать проблемы, потому что вы, возможно, настроили ячейку для размещения с двумя изображениями и хотите, чтобы она была переработана для ячейки с четырьмя изображениями.

У вас есть два варианта: либо позаботиться о том, чтобы сбросить ваши ячейки по мере необходимости (когда вы запрашиваете новую ячейку, сбросьте все созданные вами параметры просмотра, что в вашем случае будет путем удаления всех суперпредставлений), или создайте разные ячейки с разными идентификаторами для каждого из ваших макетов.

Кстати, просто глядя на ваш текущий код, кажется, что вы захотите рассмотреть некоторые пользовательские ячейки. В настоящее время вы добавляете новые изображения в представление содержимого ячейки, а это значит, что вы никогда не удаляете их каждый раз, когда ваша ячейка перерабатывается, добавляется все больше и больше изображений! Это довольно неэффективно. Лучше создать ячейку с четырьмя видами изображений, готовыми к работе, и вы просто назначаете свойство image как требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...