0

我在一个视图中有 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;
  }
}

有人知道这是为什么吗?基本上这不会创建任何单元格或显示单元格。它只显示表格视图。:(

4

5 回答 5

1

只是为了巩固上面的一些事情:

  1. 根据您的命名,您的 tableView 称为 mainVoucherTableViewController - 只是想确认这确实是 UITableView 而不是 UITableViewController?如果它是 UITableViewController,那么由于明显的原因(或不那么明显 - 让我知道并可以进一步解释),其余部分将不起作用

  2. 确保您已将当前 viewController 设置为 tableView 的委托和数据源,如果您使用的是 XIB,则使用下面的代码或在 Interface Builder 中

    self.mainVoucherTableViewController.delegate = self;
    self.mainVoucherTableViewController.dataSource = self;
    
  3. 确保您的 numberOfRowsInSection 函数被调用并且您返回非零(放入 NSLogs 等)并对 numberOfSections 执行相同操作(实际上,如果您只使用 1 个部分,则不需要 numberOfSections) - 请参阅UITableViewDataSource 协议参考:http: //developer.apple.com/library/ios/#documentation/uikit/reference/UITableViewDataSource_Protocol/Reference/Reference.html

  4. 根据上一篇文章,在开始时记录您的 cellForRow (如果点 #1-3 已检查并正常工作)以确保它已被触发,并且在返回之前。还要对您返回的单元格进行 NSLog 以确保它不是零。

于 2012-10-11T19:45:00.200 回答
1

首先登录你的tableView:cellForRowAtIndexPath:方法,看看它是否在你的 if 语句之外以及内部被调用,以帮助缩小问题。

也尝试而不是比较您的:

tableView == self.mainVoucherTableViewController

将 tableViews 设置为具有标记值。然后你可以这样做:

if(tableView.tag == 100){ // tag number we assigned self.mainVoucherTableViewController via IB
    //do your stuff here
}
于 2012-10-11T18:18:34.280 回答
-1

实例声明的顺序确实很重要。例如,如果您有一个名为的 ivar tableView

错误的

self.tableView.delegate = self;
self.tableView = [UITableView alloc] init];

正确的

self.tableView = [UITableView alloc] init];
self.tableView.delegate = self;
于 2013-10-29T10:44:24.620 回答
-1
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
 {
     if (tableView == self.mainVoucherTableViewController)
    {
       return 10;
     }
      else
     {retun 5;
     }
   }

它在第一个表中显示 10 行,第二个表显示 5 行。

于 2013-03-02T11:48:12.243 回答
-2

检查 UITableView 对象帧大小。也许帧大小不足以绘制单元格。

于 2015-04-29T06:22:26.267 回答