UITableView cellForRowAtIndexPath从不叫
我有一个UITableView
作为UIViewController
的子视图。 viewController UI通过故事板进行管理。根据需要将委托和数据源设置为viewController。UITableView cellForRowAtIndexPath从不叫
我有以下代码:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
if (updateType == Profile) {
return 15;
}
else {
return 6;
}
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 1;
}
以上两种方法被称为正是因为他们应该。调用[self.tableview reloadData]
会导致再次调用方法。令人困惑的是- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
永远不会被调用。永远。
的数据源和委托代码设置,其中self.tableview
是一个IBOutlet在故事板UITableView
:
self.tableview.delegate = self;
self.tableview.dataSource = self;
答案找到
我使用带有自动布局故事板。问题是,尽管故事板的其余部分被设置为wAny hAny,但尺寸被设置为w RegularHRegular。简单地切换它已经使它工作了!可笑,我知道,但它仍然是一个答案。
你确定你的dataSource和delegate被设置为正确的类吗?在IB中很容易混淆,特别是如果您复制/粘贴。把一个断点在viewDidAppear方法再在控制台呼叫
po self.tableView.dataSource
,以验证它在运行时设置。
我在代码中设置数据源和委托,所以这不成问题。另外,另外两个数据源方法被正确调用,所以链接肯定存在。 – JordanMazurke
有几种情况不会调用委托方法。因此,首先通过调试工具检查你的设置,看看你的设置是否合适,比如检查内存中是否存在表视图,委托和数据源。如果你的数据源是空的,那么表格视图甚至不会尝试调用哪个不是你的情况,因为你确实返回了某个数字。
通常,这只是程序员根据我之前所做的和看到的一些小错误而已。所以,双重和三重检查您的代码。你最好也发布你的 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
。
更新来自作者的回答: 事实证明,表格视图在某些尺寸等级下不可见。这就是为什么iOS甚至不会尝试,因为它根本不可见。这不是来自Apple的错误,它可以通过视图调试进行检测。
正确设置委托和数据源方法 - 正确调用numberOfSectionsInTableView和numberOfRowsInSection方法。 – JordanMazurke
男人,我以前在那里,事实证明,这只是一个愚蠢的错误。或者你能否给我更多的信息,以便我们能够有效地帮助你。 –
你的方法绝对正确,过去我被这个东西烧毁了,但在这里并非如此。一切都设置正确。还有哪些其他信息可以帮助你帮助我?谢谢 – JordanMazurke
你确定你设置的界面生成器表视图出口?即self.tableView != nil
我使用带有自动布局故事板。问题是,尽管故事板的其余部分被设置为wAny hAny,但尺寸被设置为w RegularHRegular。简单地切换它已经使它工作了!可笑,我知道,但它是一个答案!
这工作:
这不:
这推动我疯狂的时间太长了,我还是不完全了解的机制,为什么这工程,但它确实。
现在,我明白了为什么不调用委托方法。因为在wRhR大小类中,你的表视图的约束被卸载,因为可能你不支持这个大小。所以,在这个大小类中,表格视图将变为0高度。然后,iOS检测到它不是可视化的。事实证明,iOS甚至不想尝试调用它,因为它是不可见的。这绝对不是Apple的错误。这是大小类从字面上删除您的表视图。 –
你自己解决它,我们无法帮助你。无论如何,很高兴看到这是有道理的。另一种检测方法是使用视图调试,您将看到您的表视图是该大小类下的一行。 –
在我的特殊情况下,除非numberOfRowsInSection被调用,直到我将tableview上的分隔符由于某种原因翻转为单行(将其设置为none),然后调用了我的heightForRowAtIndexPath,其中我有一些自定义大小计算在字体名称错误的字体上完成,这使得它翻转出来。不知道这是否有助于任何人,但这是发生在我身上的事情。
尝试在代码中设置委托和数据源并查看是否有帮助。 – Oleshko
此外,这里http://*.com/questions/24698313/uitableview-method-cellforrowatindexpath-not-called是真正有趣的情况下,当这个功能不能被称为。核实。 – Oleshko
谢谢Oleshko - 委托和数据源已经在代码中设置。我尝试了建议重新约束,但没有任何区别。 – JordanMazurke