3

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

我正在考虑以编程方式创建单元(完全避免情节提要原型和 NIB),并希望了解这是否是一种常见做法以及我是否应该注意性能权衡。

您对解决这种结构有什么一般性建议?

4

3 回答 3

1

我解决这类问题的方法确实是切换到程序化创建,因为这样你就可以在你的 xibs 中进行子类化和实现相同的功能一次。例如,假设您有一个单元格,其中需要有一个红色正方形,有时您需要在红色正方形内有另一个绿色正方形。好吧,您可以拥有一个 MiddleSquareCell 基类,然后使用 GreenSquareCell 对其进行子类化,GreenSquareCell 仅具有用于绘制绿色正方形的覆盖。程序化解决方案的另一个优势是配置选项。因此,例如,您可以有一个类 SquareCell ,然后在创建它时有一个配置选项,上面写着

[squareCell setRedSquareVisible]; 

或者

[squareCell setRedSquareVisible]; 
[squareCell setGreenSquareVisible]; 

像这样的东西。无论如何,这是实现它的一种方式。我希望这有帮助。

于 2013-09-11T18:15:36.067 回答
1

UITableViewCells与通过 NIB 或使用多个原型单元创建代码相比,通过代码创建既不会给您带来优势也不会带来劣势。NIB 文件和原型单元格让您可以直观地操纵单元格布局,但它们并不禁止您在程序中额外操纵它。

构建单元的所有三种方式都有一个共同的要求 - 不同类型的单元必须具有不同的重用标识符(请参阅此问题进行讨论)。

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

于 2013-09-11T18:16:06.293 回答
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 文件更简单。

于 2013-09-11T18:22:21.870 回答