Objective-C visibleCells和indexPathsForVisibleRows

时间:2012-07-05 18:02:00

标签: objective-c uitableview nsindexpath

如何通过indexPathsForVisibleRows读取NSIndexpaths数组的intValue?

顺便说一句,为什么在if(cell == nil)函数之前,visibleCells和indexPathsForVisibleRows不起作用?

这是我的代码:

在cellForRowAtIndexPath方法中:

    static NSString *identifierString;
    UITableViewCell *cell = [tableView1 dequeueReusableCellWithIdentifier:identifierString];

    // when I use visibleCells and indexPathsForVisibleRows here, the app crashes

    if (cell == nil) 
    {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:identifierString] autorelease];
cell.accessoryType = UITableViewCellAccessoryNone;          
    }

    // when I use visibleCells and indexPathsForVisibleRows here, the app works

//cell implementation here

    return cell;

1 个答案:

答案 0 :(得分:4)

(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath是tableview用单元格填充的地方。如果您尝试在创建它们之前引用可见单元格,这在if语句中完成,则应用程序崩溃。 alloc命令为要创建的单元分配内存,然后使用某些参数初始化它。您在numberOfRowsInSection中指定的方法会多次调用此方法。

因此,您不会一次又一次地重新创建所有单元格,if语句会检查单元格是否存在,并且仅当它是nil时才会创建一个新单元来取代该位置。

要获取IndexPath的int行值,可以使用它的row属性。例如:

NSArray indexArray = [self.tableView indexPathsForVisibleRows];
int i=0;
while(i!=indexArray.count){
   //Log out the int value for the row
   NSLog(@"%d", indexArray[i].row);
   i++;
}

希望这有帮助