UITableViewCell 不等于 null

Posted

技术标签:

【中文标题】UITableViewCell 不等于 null【英文标题】:UITableViewCell not equal to null 【发布时间】:2013-09-18 15:00:44 【问题描述】:

我在下面的代码中遇到了问题,它基本上是从情节提要中实例化一个扩展的 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];
       ....

【问题讨论】:

【参考方案1】:

您没有做错任何事情,这正是您在情节提要中创建单元格时表格视图的工作方式。 dequeueReusableCellWithIdentifier: 方法总是在该单元格位于情节提要的表格视图中时返回一个有效单元格。似乎很多程序员还没有弄清楚这一点,仍然包括 if cell==nil 子句。这是来自文档:

“如果 dequeueReusableCellWithIdentifier: 方法要求一个在故事板中定义的单元格,该方法总是返回一个有效的单元格。如果没有等待重用的回收单元格,该方法使用故事板本身。这消除了检查 nil 的返回值并手动创建单元格的需要"

【讨论】:

我现在遇到的问题是我想在扩展的 UITableviewcell (MenuCell) 本身中初始化一些背景颜色,但是如果总是跳过 alloc,那么它会保留默认的白色背景 @Allen,你应该实现 tableView:willDisplayCell:forRowAtIndexPath:,并在那里设置你的颜色。 如何通过 tableView:willDisplayCell:forRowAtIndexPath: 访问扩展单元格的属性? (对不起菜鸟问题) 我在调用中将方法更改为:- (void)tableView:(UITableView *)tableView willDisplayCell:(MenuCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath.这是使用扩展版本的正确方法吗? @Allen,我在我的一个项目中尝试过,但没有成功。即使我将单元格的类型更改为我的自定义类,我也会崩溃。因此,如果您要更改子视图的颜色,我认为您必须在 cellForRowAtIndexPath 中进行颜色更改。

以上是关于UITableViewCell 不等于 null的主要内容,如果未能解决你的问题,请参考以下文章

插入 UITableViewCell 不起作用

无法获取 UITableViewCell 的索引路径

UITableViewCell 中 UIImageView 的颜色错误

将 UITableViewCell 高度设置为 UIImage 高度?

将 Constraint 设置为与 UiViewController 相关的 UITableViewCell

使用堆栈视图和自动布局创建自定义 UITableViewCell