UITableView cellforrowatindexpath不叫

问题描述:

我是Iphone开发的新手。所以如果我问一些非常简单的问题,请耐心等待。UITableView cellforrowatindexpath不叫

在我的应用程序中,我有多个视图(即.xib文件)。在单击主视图(CouponWebsiteViewController.Xib)上的按钮时,应用程序应加载包含UITable的第二个视图(BrowseList.Xib),并且必须用一些数据填充该UITable。我已经写了下面的代码以填充BrowseList.m文件中的数据:

- (void) viewDidLoad{ 
    arrayData = [[NSArray alloc] init]; 
    arrayData = [arrayData arrayByAddingObject:@"dfsgdf"]; 
    arrayData = [arrayData arrayByAddingObject:@"aaaaaa"]; 
    self.lblNewScreen.text = [arrayData objectAtIndex:0]; 
    [super viewDidLoad]; 
} 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    return 1; 
} 

// Customize the number of rows in the table view. 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return [arrayData count]; 
} 

// Customize the appearance of table view cells. 
- (UITableViewCell *)tableView:(UITableView *)tableView 
     cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] 
       initWithStyle:UITableViewCellStyleDefault 
       reuseIdentifier:CellIdentifier] 
       autorelease]; 
    } 

    NSString *cellValue = [arrayData objectAtIndex:indexPath.row]; 
    cell.textLabel.text = cellValue; 
    [tableView setEditing:YES animated:YES]; 
    return cell; 
} 

但它不是填充在表中的数据,当我调试代码,我发现它不执行的cellForRowAtIndexPath方法,但它正在调试numberOfRowsInSection和numberOfSectionsInTableView方法。

但有趣的是,当我在CouponWebsiteViewController.m(即在主视图)上编写相同的代码时,它将在表中填充数据。

重点是这段代码在主视图上正常工作,但它不适用于其他视图。

任何人都可以告诉我什么是我缺少的或任何其他方式来填充UITable除主视图以外的视图。

在此先感谢。 Gaurav

我不积极,但这里有一些想法。

  • 我认为当你把这个数组代码放在viewDidLoad时已经太晚了。在数据已经放入表格后执行ViewDidLoad。尝试将这些代码放在initWithStyle方法中,或者使用其他的方法。或者你甚至可以把它放在ViewWillAppear方法中,但是请确保遵循下一个建议。
  • 您可以尝试的另一件事是,只需在viewDidLoad方法的末尾调用[self.tableView reloadData]即可。虽然这不像第一个建议那么理想。
+1

将** [self.tableView reloadData] **添加到** - (void)parserDidEndDocument:(NSXMLParser *)解析器**因为我有同样的问题,所以对我很好。需要记住NSXMLParser是一个SAX操作。 – subv3rsion 2012-11-20 22:00:27

初始化的UITableView在viewWillAppear中......

您务必将您类作为餐桌上的数据源?为此,请在Interface Builder中控制并单击表格视图,然后将其拖到占位符下的文件所有者。然后选择dataSource(也可能委托,取决于您的控制器视图设置)。

您是否确定将表视图设置为委托?

如果你有一个UITableViewController,你这需要在viewDidLoad中:

[self.tableView setDelegate:self]; 

如果您有其他类型的视图控制器,只是使UITableView的一个IBOutlet,作出了tableViewDelegate和tableViewDataSource文件拥有者的连接那么这样做是viewDidLoad中:

[self.myTableProperty setDelegate:self]; 

还要确保以符合您的的UITableViewDelegate和UITableViewDataSource协议。如果视图控制器.h文件不是一个UITableViewController

干杯

如果可变数组或正在使用填充单元格的内容阵列设置为你的头文件的属性。 然后确保你总是使用

self.yourArray = [[NSMutableArray alloc] init]; 
[self.yourArray addObject:@"Object1"]; 

,然后拿到计数numberOfRowsInSection以及你需要访问它:

return [self.yourArray count]; 

这是非常喜欢这个指针,你用它来指到你的实例变量。 当然,如果您已将UITableView的dataSource和委托设置为文件的所有者,您也需要谨记。此外,你已经在viewController的头文件中包含了UITableViewDelegate和UITableViewDataSource。

我希望它能帮助你。运气最好。快乐编码! 干杯!

我在那里遇到过类似的问题。表格视图委托和数据源设置正确,并且(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section也返回肯定计数。但- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath永远不会被调用。

我试过之前的方法,但它也不工作。最后,我注意到,我忘记添加表视图作为我的视图控制器的子视图。这样做后,它就像一个魅力。

我建议你确保表格的大小需要显示行。

事实上,它可能是为什么方法cellForRowAtIndexPath未被调用,但应调用numberOfRowsInSection的情况。

在这种情况下,您不会在表格中看到任何东西。

老问题,但我会参加。对于其他人。

有很多原因,为什么tableview不更新,并且cellForRowAtIndexPath:没有被调用。

如果你直接使用一个UITableViewController那么它艾米是在“numberOfRowsInSection:”方法返回0

如果你在你的视图控制器使用一个UITableView。很有可能你没有采用正确的协议并实施正确的方法 - 另外如果你使用的xib或故事板,你没有分配正确的代表和数据源是另一个潜在的问题。

最后,如果你正在使用的UITableViewController的子类,那么它可能是你没有覆盖的默认方法之一,并再次numberOfRowsInSection将返回0。

对于遇到这个问题的人,我解决了这个加入我的TableView的控制器作为孩子使用家长控制:

UITableViewController * table = [[UITableViewController alloc] init]; 
... 
[self.view addSubview:table.tableView]; 
[self addChildViewController:table]; 
+0

这为什么有效?这有什么解释吗? – heiko 2015-01-21 12:41:16

,我也对UITableView的这个问题,我还设置了数据源,并委托给表视图,但不叫我cellForRowAtIndexPath方法。

解决方案:

  • 我的网络阻断了我的方法(通过使用防火墙)。我问我的网络管理员,我被授予了完全访问网络,然后我的cellForRowIndexPath方法被调用。

  • 当我的响应来自web服务时,由于网络块响应是黑色的,所以cellForRowIndexPath方法没有被调用。

那么,我可以为每个人添加一个简单的点与这个问题。我会建议使用调试,并确保:

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 

不返回0。如果这个功能没有实现,或者如果它返回0,方法:

​​

不叫,因为在所有没有要显示的单元格。

检查tableview已被添加到视图。如果不是,那么其他表视图委托和数据源方法将被解雇,但不是cellforrow :)