Не могу правильно отобразить кнопку на определенных строках UITableView для iPhone - PullRequest
0 голосов
/ 26 апреля 2010

Я пытаюсь получить кнопку для выбранных строк в моей таблице.

Вот пример кода, который я использую:

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

    static NSString *ControlRowIdentifier = @"ControlRowIdentifier";

    UITableViewCell *cell = [tableView 
                             dequeueReusableCellWithIdentifier:ControlRowIdentifier];

    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
                                       reuseIdentifier:ControlRowIdentifier] autorelease];
    }

    if ([indexPath row] > 5) {

        UIImage *buttonUpImage = [UIImage imageNamed:@"button_up.png"];
        UIImage *buttonDownImage = [UIImage imageNamed:@"button_down.png"];
        UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
        button.frame = CGRectMake(0.0, 0.0, buttonUpImage.size.width, buttonUpImage.size.height);
        [button setBackgroundImage:buttonUpImage forState:UIControlStateNormal];
        [button setBackgroundImage:buttonDownImage forState:UIControlStateHighlighted];
        [button setTitle:@"Tap" forState:UIControlStateNormal];
        [button addTarget:self action:@selector(buttonTapped:) forControlEvents:UIControlEventTouchUpInside];
        cell.accessoryView = button;

    }

    NSUInteger row = [indexPath row];
    NSString *rowTitle = [list objectAtIndex:row];
    cell.textLabel.text = rowTitle;

    return cell;
} 

Этот код работает абсолютно нормально при первой загрузке. Итак, согласно логике, она показывает кнопку «Tap» для всех строк больше 5.

Проблема возникает при прокрутке вверх и вниз. Как только я это сделаю, он просто начинает помещать эту кнопку в любой случайный ряд. Я не понимаю, почему это так, и было бы очень полезно, если бы кто-нибудь дал несколько советов по этому поводу.

Спасибо.

Ответы [ 2 ]

1 голос
/ 26 апреля 2010

Проблема заключается в повторном использовании идентификатора ячейки. В вашем случае ячейка с индексом меньше 6 должна быть с одним идентификатором, а остальные с другим.

0 голосов
/ 26 апреля 2010

Ячейки табличного представления - это объекты многократного использования, и вы должны сделать с ними некоторую чистую работу. Попробуйте использовать следующее:

if ([indexPath row] > 5) {

    ...


} else {
    cell.accessoryView = nil;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...