2012-06-09 119 views
12

我想弄清楚除了动态单元格(我认为)之外还有几个静态单元格,但是当我启动一个新的主从应用程序并将默认动态原型切换到静态单元,它崩溃。关于静态单元格vs动态单元格的困惑

我想,因为我仍然是新手,我不明白所有组件(表格视图,单元格,代表)是如何连线的。我切换到静态单元格后,我制作了三个单元格,但没有显示出来。该应用只是崩溃。

我可以包括代码,但基本上,我创建一个新的主 - 细节,切换到静态单元格,更改三个单元的名称,它崩溃(在主循环中)。

谢谢你的一切。

+0

你能分享堆栈跟踪吗? – sosborn

回答

45

如果我明白你的问题,这是你正在寻找的解释:

原型(重用):

当您使用动态细胞,您使用原型细胞。这意味着无论是在IB还是在您的代码中,您都会创建一个UITableViewCell的实例,并为其指定一个标识符(reuseIdentifier)。 UITableView使用此原型根据需要生成尽可能多的单元(行)。 UITableView创建(并使用内存)为尽可能多的单元格,因为它需要填充屏幕。一旦其中一些细胞熄灭屏幕,UITableView重用他们 - 回收他们。

您可以定义一个UITableView超过一个原型细胞。这个想法是每个原型都有不同的用途。例如,您可以定义一个原型单元格,它只有一个大的UILabel,其目的是使用静态文本。您可以定义另一个只有一个UIImageView的原型。这取决于您的设计以及您希望如何显示数据。

要使用的原型细胞,在IB,您使用动态原型细胞,并设置identifier。然后,你必须实现UITableViewDataSource方法,如:

– tableView:numberOfRowsInSection: 
– tableView:cellForRowAtIndexPath: 

这些方法的UITableView的委托方法。

如果不使用IB,你会在– tableView:cellForRowAtIndexPath:方法创建细胞:

的UITableViewCell *细胞= [[ALLOC的UITableViewCell] initWithStyle:(UITableViewCellStyle)样式reuseIdentifier:(的NSString *)reuseIdentifier];

静态:

静态细胞的想法只是简单。例如,您可以使用原型单元格(例如,只有一个原型)并输入静态NSArray作为数据源。为了执行UITableViewDataSource方法的任务,Apple引入了静态单元格,您只能使用故事板和IB。在IB中,选择表格视图,然后选择静态单元格改为,然后键入文字或设置图像。 您不希望在应用程序运行后对静态单元格进行任何动态更改,因为它并不适用于您,因此您将不得不实施更多不值得的方法。尽管获取所选行的indexPath并不是什么大事,但是想法是如果您需要从选择静态单元中推送新视图,则可以使用segues而不是实现任何代码。

当使用静态单元格时,您不应该实现UITableViewDataSource方法,否则您的应用程序会崩溃,反之亦然,如果您在使用原型单元格时未实现UITableViewDataSource方法(必需的),那么您的应用程序会崩溃。

+0

我打算用一个精细的梳子(你是为此写的?还是你找到它的地方?),但摆脱UITableViewDataSource方法做了窍门(不得不添加“numberOfRowsInSection”。 –

+2

很高兴它的工作原理虽然你可以在这里找到更多的解释,祝你好运! – Canopus

+0

我从所有这些知识中学到了一件好事,那就是类参考文档(组织者 - 文档)中有大量的文档。我会在发布之前阅读所有适用的类参考文档 –