在选择时用自定义单元格替换标准UITableViewCell

时间:2011-12-02 16:21:00

标签: objective-c ios uitableview

我有UITableview标准UITableViewCells。在选择单元格时,我想使用UITextViews而不是detailTextLabelUITextFields而不是附件View的自定义单元格替换该单元格。实施这个的最佳方法是什么?

3 个答案:

答案 0 :(得分:1)

创建UITableViewCell的子类。将UITextFieldUITextField(取决于您的解决方案)添加到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;
}

答案 1 :(得分:0)

cellForRowAtIndexPath:中构建普通单元格。在didSelectrowAtIndexPath:上,执行tableview重新加载。

使用全局标志跟踪行选择,每次构造单元格之前,检查标志并确定要加载的单元格类型。

答案 2 :(得分:0)

您可能会发现始终使用自定义表格视图单元格更简单,但在选择它时具有不同的外观(例如,当调用setSelected时,您可以更改子视图或颜色或其他任何内容)。