关于静态细胞与动态细胞的混淆

ari*_*old 14 ios

我想弄清楚如何在动态单元格之外还有一些静态单元格(我认为)但是当我启动一个新的Master-Detail应用程序并将默认的动态原型切换到静态单元格时,它会崩溃.

我想,既然我还是新手,我不明白所有组件(表视图,单元格,代理)是如何连接的.在我切换到静态细胞后,我制作了三个细胞,但它们没有显示出来.该应用程序崩溃了.

我可以包含代码,但基本上,我创建一个新的Master-Detail,切换到静态单元格,更改三个单元格的名称,然后崩溃(在主循环中).

谢谢你的一切.

Can*_*pus 51

如果我理解你的问题,这就是你要找的解释:

原型(可重用性):

使用动态单元格时,使用原型单元格.这意味着在IB或代码中,您创建一个实例UITableViewCell,并为其指定一个标识符(reuseIdentifier).在UITableView使用这种原型产生尽可能多的细胞(行),因为你需要.UITableView为填充屏幕所需的单元格创建(并使用内存).一旦这些细胞中的一些离开屏幕,UITableView 重复使用它们 - 回收它们.

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

要在IB中使用原型单元,请使用Dynamic Prototypes单元格,然后设置identifier.然后你必须实现UITableViewDataSource方法,例如:

– tableView:numberOfRowsInSection: 
– tableView:cellForRowAtIndexPath:
Run Code Online (Sandbox Code Playgroud)

这些方法是UITableView的委托方法.

如果不使用IB,您将在– tableView:cellForRowAtIndexPath:方法中创建单元格:

UITableViewCell*cell = [[UITableViewCell alloc] initWithStyle :( UITableViewCellStyle)样式reuseIdentifier:(NSString*)reuseIdentifier];

静态的:

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

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

  • 很高兴它有效.它只适合你!虽然你可以找到更广泛的解释.祝好运! (2认同)