我如何集中cellForRowAtIndexPath?

时间:2011-11-24 17:00:27

标签: iphone objective-c ios uitableview

我希望有一个- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath方法,所有UITableView'将用于格式化等。

实现这一目标的最佳方法是什么?

现在我想我可以在我的app委托中使用单独的类或委托方法,并将UITableView的文件所有者挂钩。但是,我必须提供那些通常在ViewController子类中正确的数据的类/方法访问。

其他人如何完成这类事情?

编辑:为了澄清,我不是在寻找一种返回公共单元格的方法,而是在我的整个应用程序中使用单个cellForRowAtIndexPath方法。< / p>

3 个答案:

答案 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; 

如果您愿意,可以使用协议执行此操作。这取决于您如何构建数据。