在obj c中设置表格单元格的模型

时间:2015-06-02 15:09:07

标签: objective-c uitableview swift

在Swift中,我喜欢通过声明一个模型来设置我的表格单元格,一旦设置了该模型,我就继续更新该特定单元格的UI ...

class CustomTableViewCell: UITableViewCell
{
     var myModel: Model? {
         didSet {
            updateCell()
         }
     }

     func updateCell() {           
        NameLabel.text = myModel.Name
        Img.image = ....
        anotherLabel.text = myModel.anotherLabel
       //and so on
     }
}

我的表格视图控制器看起来或多或少像以下

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
    let cell = tableView.dequeueReusableCellWithIdentifier(Storyboard.CellReuseIdentifier, forIndexPath: indexPath) as! CustomTableViewCell

    cell.myModel = someCollection[indexPath.row]

    return cell
}

有没有办法在目标c中实现这种功能?我喜欢这个,因为我可以保持控制器的亮度。在目标C中,我通常会按照......的方式做一些事情。

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

    MyCustomCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyCustomCell"];

    cell.NameLabel.text = whatever;
    cell.Img.image = ...
    cell.anotherLabel.text = ...;
}

控制器在这个部分会变得相当臃肿,特别是如果每​​个表格单元有很多自定义。我宁愿在单元格实现文件中处理它。

我能想到的一种方法是在自定义单元格的头文件中声明一个函数,然后简单地将该对象传递给表视图控制器中的函数...所以它在{中看起来像这样{1}}

cellForRowAtIndexPath

然而,这是最佳做法吗?还有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

cell需要大量自定义时,我会经常这样做。但是我处理它有点不同。例如:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
  CustomCellClass *cell = [tableView  dequeueReusableCellWithIdentifier:@"Cell"];

    ItemClass *item = self.someCollection[indexPath.section];
   cell.item = item;

    return cell;
}

然后在单元格类的标题中,我声明了item的属性,如下所示:@property (strong, nonatomic) ItemClass *item;

in item的setter方法:

-(void)setItem:(ItemClass *)aItem
{
    _item = aItem;

  self.labelOne.text = _item.name; 
//And so on... 
}

这可以很好地设置单元格,您可以根据模型使用的对象类型使用不同的setter方法。

希望这会有所帮助/