以编程方式创建UITableViewCells

时间:2013-09-11 18:10:01

标签: ios objective-c uitableview

我的UITableViewCells有点失控,我正试图更好地构建它们。问题是单元格可以具有不同的布局结构,例如标签数量,标签宽度和位置,并且可以包括不同的图像和按钮。为了只执行一次布局,我为每个配置创建了自定义NIB,但这导致了20多种不同的可能布局,难以维护和调整。

我正在考虑以编程方式创建单元格(完全避免故事板原型和NIB),并希望了解这是否是一种常见做法,如果有性能权衡,我应该知道。

您在解决此类结构时有哪些一般性建议?

3 个答案:

答案 0 :(得分:2)

通过代码创建UITableViewCells与通过NIB创建或使用多个原型单元相比,既不会带来优势也不会有缺点。 NIB文件和原型单元允许您直观地操作单元格布局,但它们不会禁止您在程序中另外操作它。

构建单元格的所有三种方法都有一个共同的要求 - 不同类型的单元格必须具有不同的重用标识符(see this question for a discussion)。

如果您担心的是20多个NIB文件的扩散,请考虑原型单元格方法,它可以让您保留在单个故事板文件中。

答案 1 :(得分:1)

我解决这类问题的方式确实是切换到程序化创建,因为这样你就可以在整个xib中只做一次子类和实现相同的功能。例如,假设你有一个细胞需要在它里面有一个红色的正方形,有时你需要在红色正方形内另一个正方形的绿色。那么你可以有一个MiddleSquareCell的基类,然后用GreenSquareCell继承它,它只有一个覆盖画绿色方块。程序化解决方案的另一个优点是配置选项。因此,例如,您可以使用SquareCell类,然后在创建

时创建配置选项
[squareCell setRedSquareVisible]; 

[squareCell setRedSquareVisible]; 
[squareCell setGreenSquareVisible]; 

这样的事情。无论如何,这是实现它的一种方式。我希望这会有所帮助。

答案 2 :(得分:0)

如果我明白你在说什么,那么我肯定会说程序路线是你最好的选择!您可以在IB中设计自定义单元格并将它们与自己的类链接起来。在该类中,您可以设置可以访问的公共属性,以便以编程方式设置它们。

以下是表格视图的典型单元格代码:

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

    // from here you can have some if statements to determine the subclassing of that specific cell

    if ([cell isKindOfClass:[CustomCell class]]) {
        CustomCell *customCell = (CustomCell *)cell;

        customCell.label.text = @"Text";
        customCell.image = self.UIImageProperty;
    } else if (//Other kind of custom cell) {

    }

    return cell;
}

这样做可以让您轻松显示多个自定义单元格。既然你可以继承它,那将使你的生活更轻松。请记住,您需要将每个单元格的类设置为您需要的任何子类。

这方面的优点是基本的:以编程方式,您可以更灵活地更改单元格,并且将子单元格子化为创建一堆nib文件将更加简单。