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 中的委托和数据源挂钩? 仔细检查您的UITableViews 的数据源和委托已通过插座链接或代码设置。 我猜您是在将视图与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:没有被调用的主要内容,如果未能解决你的问题,请参考以下文章

当tableview结束显示单元格时如何更改为读取状态?

设置从 HTML 字符串生成的 UITableViewCell 标签

iOS面试

let tableView = UITableView()与let tableView之间的区别:UITableView!这两个语句

复制所选单元格中的数据(Swift)

如何更改表格视图中单元格的删除动画持续时间? [复制]