iPhone: скрыть дополнительную кнопку в UITableViewCell ПРАВИЛЬНО на основе раскадровки - PullRequest
0 голосов
/ 28 февраля 2012
  • Что я хочу

    Существует представление таблицы. Я просто хочу скрыть аксессуар UIButtonTypeContactAdd, нажав его в TableViewCell.

  • Моя проблема

    Когда я коснулся вспомогательной кнопки A (которую я нажимал только в течение всей процедуры), она скрывалась правильно.Но когда я прокрутил стол, я обнаружил, что еще одна дополнительная кнопка B была спрятана до смешного.После прокрутки быстро к верхней части таблицы, парень кнопки B снова был там, а другая кнопка C скрылась ...

    Жаль, что я не могу поместить изображения в свой постНадеюсь, вы можете понять, что случилось.

  • Код
    tableView: cellForRowAtIndexPath:

    static NSString *CellIdentifier = @"All Name Showing Table";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }
    if(!cell.accessoryView){
        UIButton *button = [UIButton buttonWithType:UIButtonTypeContactAdd];
        [button addTarget:self action:@selector(buttonTapped:) forControlEvents:UIControlEventTouchUpInside];
        cell.accessoryView = button;
    }
    

    - (IBAction)buttonTapped:(UIButton *)sender
    {
        UITableViewCell *tvc = (UITableViewCell *)[sender superview];
        NSString *peopleTapped = [NSString stringWithFormat:@"you have favored %@",tvc.textLabel.text];
        NSLog(@"%@",peopleTapped);

        sender.hidden = YES;
    }

Всеэто из-за механизма повторного использования клеток?

Извините за мой плохой английский.
Спасибо!

Ответы [ 2 ]

1 голос
/ 28 февраля 2012

Вы не можете использовать таблицу таким образом. У вас должна быть модель данных с объектом, в котором хранится состояние кнопки вспомогательной кнопки.

static NSString *CellIdentifier = @"All Name Showing Table";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
if(!cell.accessoryView){
    UIButton *button = [UIButton buttonWithType:UIButtonTypeContactAdd];
    [button addTarget:self action:@selector(buttonTapped:) forControlEvents:UIControlEventTouchUpInside];
    cell.accessoryView = button;
}

Model *model = [_array objectAtIndex:indexPath.row];
button.tag = [_array indexOfObject:indexPath.row];
button.hidden = model.hidden;

....
}


- (IBAction)buttonTapped:(UIButton *)sender
{
 Model *model = [_array objectAtIndex:sender.tag];
 model.hidden = YES;
 [table reloadData];
}

Как то так.

0 голосов
/ 28 февраля 2012

Да, это происходит из-за повторного использования клеток. Вы должны быть в состоянии отслеживать каждую кнопку в табличном представлении, вероятно, выравнивая ее с вашим источником данных. Это может быть легко достигнуто, если ваш источник данных ячейки будет отслеживать состояние каждой кнопки.

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