UITableView tableView:cellForRowAtIndexPath:没有被调用
Posted
技术标签:
【中文标题】UITableView tableView:cellForRowAtIndexPath:没有被调用【英文标题】:UITableView tableView:cellForRowAtIndexPath: not getting called 【发布时间】:2012-10-11 17:53:21 【问题描述】:我在一个视图中有 3 个表视图,我想知道为什么 tableView:cellForRowAtIndexPath:
没有被调用。
#pragma mark -
#pragma mark <UITableViewDelegate>
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
if (tableView == self.mainVoucherTableViewController)
[self setSelectedIndex:indexPath.row];
- (NSInteger)tableView:(UITableView *)tableView
numberOfRowsInSection:(NSInteger)section
if (tableView == self.mainVoucherTableViewController)
return 10;
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
if (tableView == self.mainVoucherTableViewController)
static NSString *MyIdentifier = @"MyReuseIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if (cell == nil)
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier];
cell.textLabel.text = @"THISTEXT";
return cell;
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
if (tableView == self.mainVoucherTableViewController)
return 1;
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
// The header for the section is the region name -- get this from the region at the section index.
if (tableView == self.mainVoucherTableViewController)
NSString * myString = [NSString stringWithFormat:@"HELLLO WORLD"];
return myString;
有人知道这是为什么吗?基本上这不会创建任何单元格或显示单元格。它只显示表格视图。 :(
【问题讨论】:
检查表和它的数据源之间的连接。 您使用的是UITableViewController
还是UIViewController
?如果后者是您的 tableview 与您在 IB 中的委托和数据源挂钩?
仔细检查您的UITableView
s 的数据源和委托已通过插座链接或代码设置。
我猜您是在将视图与tableView == self.mainVoucherTableViewController
中的控制器进行比较?
@iBlue 我正在通过 UIViewController 中的代码创建 UITableView,
【参考方案1】:
只是为了巩固上面的一些东西:
根据您的命名,您的 tableView 称为 mainVoucherTableViewController - 只是想确认这确实是 UITableView 而不是 UITableViewController?如果它是 UITableViewController,那么由于显而易见的原因,其余部分将不起作用(或不那么明显 - 让我知道并可以进一步解释)
确保您已将当前 viewController 设置为 tableView 的委托和数据源,使用下面的代码或在 Interface Builder 中(如果您使用的是 XIB)
self.mainVoucherTableViewController.delegate = self;
self.mainVoucherTableViewController.dataSource = self;
确保您的 numberOfRowsInSection 函数被调用并且您返回非零(放入 NSLogs 等)并对 numberOfSections 执行相同操作(实际上,如果您只是使用 1 部分)- 请参阅 UITableViewDataSource 协议参考:http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableViewDataSource_Protocol/Reference/Reference.html
根据之前的帖子,在开始时和返回之前记录您的 cellForRow(如果点 #1-3 已检查并正常工作)以确保它已被触发。还要对你返回的单元格做一个 NSLog,以确保它不是 nil。
【讨论】:
问题是 Cellforrowatindexpath 没有被调用。所以我不能记录任何东西。我使用了bebugger,它甚至没有进入方法。 我还完成了您在此处编写的所有其他内容。抱歉 maintableviewcontroller 实际上是一个 tableview 而不是 talbeviewcontroller 你能把你的代码发给我还是把 .m 和 .h 文件的全部内容发在这里?【参考方案2】:首先登录您的 tableView:cellForRowAtIndexPath:
方法,看看它是否在您的 if 语句之外以及内部都被调用,以帮助缩小问题范围。
也尝试而不是比较您的:
tableView == self.mainVoucherTableViewController
将 tableViews 设置为具有标记值。然后你可以这样做:
if(tableView.tag == 100) // tag number we assigned self.mainVoucherTableViewController via IB
//do your stuff here
【讨论】:
【参考方案3】:- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
if (tableView == self.mainVoucherTableViewController)
return 10;
else
retun 5;
第一个表显示10行,第二个表显示5行。
【讨论】:
【参考方案4】:实例声明的顺序很重要。例如,如果您有一个名为 tableView
的 ivar:
错误
self.tableView.delegate = self;
self.tableView = [UITableView alloc] init];
正确
self.tableView = [UITableView alloc] init];
self.tableView.delegate = self;
【讨论】:
【参考方案5】:检查 UITableView 对象帧大小。可能 Frame size 不足以绘制 Cell。
【讨论】:
以上是关于UITableView tableView:cellForRowAtIndexPath:没有被调用的主要内容,如果未能解决你的问题,请参考以下文章
设置从 HTML 字符串生成的 UITableViewCell 标签
let tableView = UITableView()与let tableView之间的区别:UITableView!这两个语句