0

我有一个带有几个 UITableView 的故事板。我想为 UITableViewCell 选择不同的显示类型的选定状态。我解释得更好。

直接进入代码我想要一个驱动突出显示类型的枚举或标志。

-(void)setSelected:(BOOL)selected animated:(BOOL)animated {
    [super setSelected:selected animated:animated];
     switch(cellViewMode) {
       case Simple:
         [self simpleCell:selected];
         break;

       case Full:
         [self fullCell:selected];
         break;

       default:
         // default method...
         break; 
    }
}

我正在寻找基于视图控制器类型设置此 cellViewMode 标志一次且永不更改的最佳方法,考虑到实际上我以故事板的通常推荐方式调用我的单元格,其中声明了标识符,而不是之前在 cellForRow: 中有一个静态 NSString *cellIdentifier 和一个 if 检查单元格存在的时候:

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

    Obj *obj = // get obj from datasource
    MyTableViewCell *cell = [table dequeueReusableCellWithIdentifier:MyTableCellIdentifier]; // <-- this is how it is done in storyboard
    cell.cellTitle.text=obj.titleForCell;
    cell.cellDescr.text=obj.descriptionForCell;

    return cell;
}

我已经指定我需要一个标志,但我对其他解决方案持开放态度,比如类别,或者任何可能以优雅的方式运作良好的解决方案。

4

1 回答 1

0

经过少量研究,我通过使用单元格标识符属性轻松解决了这个问题,但由于标识符的性质,使用了“if”语句。

-(void)setSelected:(BOOL)selected animated:(BOOL)animated {
    [super setSelected:selected animated:animated];
     if(self.reuseIdentifier==SimpleConstant) {
         [self simpleCell:selected];
         return;
     }

     if(self.reuseIdentifier==FullConstant) {
         [self fullCell:selected];
         return;
     }

     // handle other default case...
}

我个人不喜欢这样使用“if”语句,但我没有找到更好的解决方案。

于 2012-09-10T15:42:43.540 回答