UITableView tableView:cellForRowAtIndexPath:没有被调用

时间:2012-10-11 17:53:21

标签: iphone objective-c ios uitableview ios4

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

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

5 个答案:

答案 0 :(得分:1)

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

也可以尝试而不是比较你的:

tableView == self.mainVoucherTableViewController

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

if(tableView.tag == 100){ // tag number we assigned self.mainVoucherTableViewController via IB
    //do your stuff here
}

答案 1 :(得分:1)

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

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

  2. 确保已将当前viewController设置为tableView的委托和dataSource,使用下面的代码或在Interface Builder中使用XIB

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

  4. 按照之前的帖子,记录你的cellForRow(如果点#1-3被检查并正常工作),以确保它被触发,并在返回之前。同时做一个你要返回的单元格的NSLog,以确保它不是零。

答案 2 :(得分:-1)

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
 {
     if (tableView == self.mainVoucherTableViewController)
    {
       return 10;
     }
      else
     {retun 5;
     }
   }

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

答案 3 :(得分:-1)

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

<强> WRONG

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

<强> CORRECT

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

答案 4 :(得分:-2)

检查UITableView对象框架大小。也许帧大小不足以绘制Cell。