Замена стандартного UITableViewCell пользовательской ячейкой при выделении - PullRequest
2 голосов
/ 02 декабря 2011

У меня есть UITableview со стандартным UITableViewCells. При выборе ячейки я хотел бы заменить эту ячейку пользовательской ячейкой на UITextViews вместо detailTextLabel и UITextFields вместо accessoryView. Каков наилучший способ реализации этого?

Ответы [ 3 ]

1 голос
/ 02 декабря 2011

Создать подкласс UITableViewCell.Добавьте UITextField или UITextField (в зависимости от того, что подходит для вашего решения) к contentView и сделайте их скрытыми.Переопределите метод `-setSelected: animated: ':

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
  [super setSelected:selected animated:animated];
  if ( animated ) {
    // using old-school UIView animation support to fade in/out controls,
    // block-based much easier, but only 4.0 or greater
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
    self.textLabel.alpha = (selected) ? 0.0 : 1.0;
    self.detailTextLabel.alpha = (selected) ? 0.0 : 1.0;
    // assumed you added a UITextView 'textView' ivar
    self.textView.alpha = (selected) ? 1.0 : 0.0;
    [UIView commitAnimations];
  }
  else {
    self.textLabel.hidden = selected;
    self.detailTextLabel.hidden = selected;
    self.textView.hidden = !selected;
  }
}

- (void)animationDidStop:(NSString *)animationID finished:(BOOL)finished context:(void *)context
{
  self.textLabel.hidden = self.selected;
  self.detailTextLabel.hidden = self.selected;
  self.textView.hidden = !self.selected;
}
0 голосов
/ 02 декабря 2011

Возможно, вам будет проще всегда использовать свою пользовательскую ячейку табличного представления, но при выборе она будет выглядеть по-другому (например, когда вызывается setSelected, вы можете изменить свои подпредставления или цвета или что-то еще).

0 голосов
/ 02 декабря 2011

Построить нормальную ячейку в cellForRowAtIndexPath:. На didSelectrowAtIndexPath: выполните перезагрузку таблицы.

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

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