UITableView中标识符的用途是什么

时间:2015-07-07 15:46:37

标签: ios uitableview

我有点困惑为什么总是需要一个标识符(* 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'?假设我们有多个标识符,我们应该选择哪一个?确切地说,如果我们有父母,子女和子女等等,那该怎么办?

3 个答案:

答案 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;
}

如果不指定标识符,系统将不知道要选择哪种类型的单元格。