我的 UITableViewCells 有点失控,我正在尝试更好地构建它们。问题是单元格可以具有不同的布局结构,例如标签数量、标签宽度和位置,并且可以包含不同的图像和按钮。为了只执行一次布局,我为每个配置创建了自定义 NIB,但这导致了 20 多种不同的可能布局,这些布局难以维护和调整。
我正在考虑以编程方式创建单元(完全避免情节提要原型和 NIB),并希望了解这是否是一种常见做法以及我是否应该注意性能权衡。
您对解决这种结构有什么一般性建议?
我的 UITableViewCells 有点失控,我正在尝试更好地构建它们。问题是单元格可以具有不同的布局结构,例如标签数量、标签宽度和位置,并且可以包含不同的图像和按钮。为了只执行一次布局,我为每个配置创建了自定义 NIB,但这导致了 20 多种不同的可能布局,这些布局难以维护和调整。
我正在考虑以编程方式创建单元(完全避免情节提要原型和 NIB),并希望了解这是否是一种常见做法以及我是否应该注意性能权衡。
您对解决这种结构有什么一般性建议?
我解决这类问题的方法确实是切换到程序化创建,因为这样你就可以在你的 xibs 中进行子类化和实现相同的功能一次。例如,假设您有一个单元格,其中需要有一个红色正方形,有时您需要在红色正方形内有另一个绿色正方形。好吧,您可以拥有一个 MiddleSquareCell 基类,然后使用 GreenSquareCell 对其进行子类化,GreenSquareCell 仅具有用于绘制绿色正方形的覆盖。程序化解决方案的另一个优势是配置选项。因此,例如,您可以有一个类 SquareCell ,然后在创建它时有一个配置选项,上面写着
[squareCell setRedSquareVisible];
或者
[squareCell setRedSquareVisible];
[squareCell setGreenSquareVisible];
像这样的东西。无论如何,这是实现它的一种方式。我希望这有帮助。
UITableViewCells
与通过 NIB 或使用多个原型单元创建代码相比,通过代码创建既不会给您带来优势也不会带来劣势。NIB 文件和原型单元格让您可以直观地操纵单元格布局,但它们并不禁止您在程序中额外操纵它。
构建单元的所有三种方式都有一个共同的要求 - 不同类型的单元必须具有不同的重用标识符(请参阅此问题进行讨论)。
如果您担心的是 20 多个 NIB 文件的激增,请考虑原型单元方法,它可以让您留在单个故事板文件中。
如果我明白你在说什么,那么我肯定会说程序化路线是你最好的选择!您可以在 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 文件更简单。