我有点困惑为什么总是需要一个标识符(* MyIdentifier)。下面的代码演示了这一点。我注意到所有的tableviews都需要至少一个。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *MyIdentifier = @"MyIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier] autorelease];
}
拥有标识符的目的是什么?我已经看过一些有不止一个的教程。此外,阅读Apple文档,我对为什么要调用以下内容感到有点困惑:
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier] autorelease];
}
我想知道为什么需要输入' MyIdentifier'?假设我们有多个标识符,我们应该选择哪一个?确切地说,如果我们有父母,子女和子女等等,那该怎么办?
答案 0 :(得分:0)
来自文档:
标识符是标识要重用的单元对象的字符串。此参数不得为零。
对于性能原因,表视图的数据源通常应该在它的tableView:cellForRowAtIndexPath:方法中将单元格分配给行时重用UITableViewCell对象。表视图维护数据源已标记为可重用的UITableViewCell对象的队列或列表。当要求为表视图提供新单元格时,请从数据源对象中调用此方法。如果现有单元格可用,则此方法会使现有单元格出列,或者使用先前注册的类或nib文件创建新单元格。如果没有单元可供重用,并且您没有注册类或nib文件,则此方法返回nil。
答案 1 :(得分:0)
每次返回单元格时,您都有2个选项 - 您可以创建新单元格并将其返回,使已存在的单元格出列并重新配置。
所以它的工作方式是当你创建单元格时,你给它重用标识符,所以当单元格离开屏幕时,它可以用来代替创建新的单元格。在单元格出列后,您可能想要更改其属性(如文本或图像)
您可以为不同的单元格类型(不同的内容视图)使用不同的重用标识符
答案 2 :(得分:0)
假设您有几个自定义的UITableViewCells,并且每个都有不同的背景颜色。在storyboard或xib文件中,您可以将红色背景颜色为“redCell”的单元格命名为蓝色“blueCell”。然后,您可以使用其标识符选择要添加到特定行的单元格类型。假设您想将红色单元格应用于奇数行,将蓝色单元格应用于偶数行,则可以使用以下代码执行此操作:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *redCell = [tableView dequeueReusableCellWithIdentifier:@"redCell"];
UITableViewCell *blueCell = [tableView dequeueReusableCellWithIdentifier:@"blueCell"];
if (indexPath.row % 2 == 0) return redCell;
else return blueCell;
}
如果不指定标识符,系统将不知道要选择哪种类型的单元格。