我在使用下面的代码时遇到了问题,它基本上是从故事板中实例化扩展的uitableviewcell。我遇到的问题是,似乎leftMenuCell 从不等于null,因此永远不会进入启动块。我做错了什么?
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"LeftMenuCell";
MenuCell *leftMenuCell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if(leftMenuCell == nil) {
NSLog(@"creating a new cell");
leftMenuCell = [[MenuCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
} ....
答案 0 :(得分:9)
你没有做错任何事情,这就是在故事板中创建单元格时表视图的工作方式。当该单元格位于故事板中的表视图中时,dequeueReusableCellWithIdentifier:方法始终返回有效单元格。似乎许多程序员都没有想到这一点,并且仍然包含if cell == nil子句。这来自文档:
“如果dequeueReusableCellWithIdentifier:方法请求在故事板中定义的单元格,则该方法始终返回一个有效的单元格。如果没有等待重用的循环单元格,该方法将使用该信息中的信息创建一个新的单元格。故事板本身。这消除了检查nil的返回值并手动创建单元格的需要“