故事板静态单元格:dequeueReusableCellWithIdentifier返回nil

Mun*_*ndi 21 iphone storyboard uitableview ios ios5

用故事板,静态细胞,cellForRowAtIndexPath:

UITableViewCell *cell = 
   [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
Run Code Online (Sandbox Code Playgroud)

总是回来nil.

我检查了以下内容:

  • 在IB/Storyboard中正确设置了单元的标识符,并在代码中使用相同的标识符.我多次验证了这一点.
  • 我没有在其他地方实例化视图控制器(这是此stackoverflow问题中的问题).

我的视图控制器UITableViewController当然是包含在故事板中的临时导航控制器中的子类.怀疑我的视图控制器以某种方式不知道故事板中定义的单元标识符,因为它可能是另一个实例,这里是代码"实例化"它.在prepareForSegue:,我用

CustomViewController *vc = [[[segue destinationViewController] 
   viewControllers] objectAtIndex:0];
Run Code Online (Sandbox Code Playgroud)

这里完成的视图控制器的其他自定义(设置属性等)工作正常.

我使用静态单元格,因为节和行的数量不会改变,每个单元格包含静态文本(以及其他控件或要编辑的文本字段).

在我看来,这是一个非常常见的任务(在视图控制器的数据源方法中自定义故事板中的静态单元格).我究竟做错了什么?

jrt*_*ton 44

对于表视图中的静态内容,您不实现任何数据源方法(包括tableView:cellForRowAtIndexPath:,因此您永远不会将单元格出列.静态内容没有出列(无论如何您都可以参与).

如果要获取指向特定单元格的指针:

  • 从表视图中获取它cellForRowAtIndexPath::

    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    
    Run Code Online (Sandbox Code Playgroud)
  • 有特定单元格的出口并直接定制.

  • 遍历单元格并检查reuseIdentifier属性以获取您感兴趣的单元格.

任何这些东西都可以在viewWillAppear或类似的东西中完成.

如果您希望单元格中的内容与故事板上的内容完全不同,那么静态单元格可能不是正确的选择.您应该使用传统的数据源方法来使用动态原型(请注意,故事板中可以有多个原型).