在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
然而,这是最佳做法吗?还有更好的方法吗?
答案 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方法。
希望这会有所帮助/