我希望有一个- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath
方法,所有UITableView'
将用于格式化等。
实现这一目标的最佳方法是什么?
现在我想我可以在我的app委托中使用单独的类或委托方法,并将UITableView
的文件所有者挂钩。但是,我必须提供那些通常在ViewController子类中正确的数据的类/方法访问。
其他人如何完成这类事情?
编辑:为了澄清,我不是在寻找一种返回公共单元格的方法,而是在我的整个应用程序中使用单个cellForRowAtIndexPath
方法。< / p>
答案 0 :(得分:2)
如果您只想集中所有格式,但每个类中的数据源是分开的,您可以为表视图单元创建一个工厂类,它提供了一种方法
+ (UITableViewCell* ) tableViewCellForTableView:(UITableView *)tableView withType:(int)type;
通过创建传入的类型costants,您可以创建一组基本的表视图单元格,然后可以由此类返回。传递tableView以使用可重用单元格非常重要。 cellForRowAtIndexPath
现在可以从那里获取单元格并根据数据配置它们
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [MyCellFactory tableViewCellForTableView:tableView withType:kMyTypePlain];
cell.textLabel.text = ....;
}
答案 1 :(得分:0)
您可以考虑在ViewController上使用objective-c category来实现cellForRowAtIndexPath
方法。
如果您在此方法中执行的操作非常复杂,我建议您只创建一个包含您的单元格的nib文件,然后将其加载到cellFoRowAtIndexPath
中。您甚至可以创建一个继承自UITableViewCell
的类,并在其中粘贴您自己的方法/属性。我强烈推荐这种方法。
您可以加载笔尖,说“MyCustomTableCell.nib”,其中包含您自定义的UITableViewCell
,如下所示:
NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"MyCustomTableCell"
owner:self
options:nil];
MyCustomTableCell* cell = [topLevelObjects objectAtIndex:0];
答案 2 :(得分:0)
我认为你可以使用@TriPhoenix的答案来解决大部分问题。
我要补充的另一件事是,您可能会将数据与调用一起发送到工厂。
[MyCellFactory cellForTableView:tableView withType:kMyTypePlain data:data];
您当然必须确保data
响应通用界面以确保您可以轻松设置内容,例如确保每个对象都响应类似的方法,如
cell.textLabel.text = data.textLabelText;
如果您愿意,可以使用协议执行此操作。这取决于您如何构建数据。