在cellForRowAtIndexPath:
行中使用故事板,静态单元格
UITableViewCell *cell =
[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
始终返回nil
。
我检查过以下内容:
我的视图控制器是UITableViewController
的子类,当然,它包含在故事板中的 ad hoc 导航控制器中。怀疑我的视图控制器以某种方式不知道故事板中定义的单元标识符,因为它可能是另一个实例,这里是代码“实例化”它。在prepareForSegue:
中,我使用
CustomViewController *vc = [[[segue destinationViewController]
viewControllers] objectAtIndex:0];
此处完成的视图控制器的其他自定义(设置属性等)工作正常。
我正在使用静态单元格,因为部分和行的数量不会改变,并且每个单元格都包含静态文本(以及其他要编辑的控件或文本字段)。
在我看来,这是一项非常常见的任务(在视图控制器的数据源方法中自定义故事板中的静态单元格)。我做错了什么?
答案 0 :(得分:44)
对于表视图中的静态内容,您不实现任何数据源方法(包括tableView:cellForRowAtIndexPath:
),因此您永远不会将单元格出列。静态内容没有出列(您可以参与其中) ,无论如何)。
如果您想获得指向特定单元格的指针:
使用cellForRowAtIndexPath:
从表格视图中获取它:
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
有特定单元格的插座并直接自定义。
reuseIdentifier
属性以获取您感兴趣的单元格。任何这些事情都可以在viewWillAppear或类似的事情中完成。
如果您希望单元格中的内容与故事板上的内容完全不同,那么静态单元格可能不是正确的选择。您应该使用传统的数据源方法来使用动态原型(请注意,故事板中可以有多个原型)。
答案 1 :(得分:0)
解决方案是使用原型细胞而不是静态细胞。我还在给@jrturton支票,因为他是第一个给我这个想法的人。
我刚解决的另一个有趣错误:对于“自定义”类型的原型单元格,如果您尝试用文本填充cell.textLabel
,它将自动运行,但所有其他子视图的行为都非常奇怪。我现在只使用我的自定义标签,一切正常。
干杯,谢谢大家帮忙。
答案 2 :(得分:0)
与上述答案不同,
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
不起作用。但是,所提到的创建cell
本身的出口的方法正在发挥作用。
也可以在UIButtons
上放置UITextFields
或cell
等观点,并为这些观点提供出口。
两种方法也可以组合使用。例如。为特定单元格设置cell.textLabel.text
,并从控件出口访问另一个控件。
答案 3 :(得分:0)
在故事板中,静态单元CAN&#39; T实现了<UITableViewDataSource>
协议中的方法。
因此,您可以使用<UITableViewDelegate>
中包含的方法。
答案 4 :(得分:0)
您仍然可以使用静态UITableView
的dataSource / delegate方法,您只需要创建新单元格。
如果要使用dataSource方法修改单元格,请在cellForRowAtIndexPath:
:
UITableViewCell * cell = [super tableView:tableView cellForRowAtIndexPath:indexPath];
然后开始修改单元格。
答案 5 :(得分:0)
我知道这是一个非常古老的问题,但处理这个问题的更好方法是使用 tableView(_:willDisplay:forRowAt:)