我的UITableViewCells有点失控,我正试图更好地构建它们。问题是单元格可以具有不同的布局结构,例如标签数量,标签宽度和位置,并且可以包括不同的图像和按钮。为了只执行一次布局,我为每个配置创建了自定义NIB,但这导致了20多种不同的可能布局,难以维护和调整。
我正在考虑以编程方式创建单元格(完全避免故事板原型和NIB),并希望了解这是否是一种常见做法,如果有性能权衡,我应该知道。
您在解决此类结构时有哪些一般性建议?
答案 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文件将更加简单。