未调用 UITableViewDelegate cellForRowAtIndexPath
Posted
技术标签:
【中文标题】未调用 UITableViewDelegate cellForRowAtIndexPath【英文标题】:UITableViewDelegate cellForRowAtIndexPath not called 【发布时间】:2014-12-28 06:23:05 【问题描述】:我有一个带有 tableview 的 table view 控制器,我在 storyboard 中设置了一个从 mapViewController 到它的 push segue。当用户触摸 ios 提供的注解标注时,会调用 calloutAccessoryControllTapped 函数,并通过称为
的通知间接调用 [self performSegueWithIdentifier:@"SequeToConversationList" sender:self];
这很好用。
但是,我将 ios 提供的标注替换为在 XIB 中布置的自定义标注。它有一个按钮,其操作会导致执行上面的同一行代码,并且发生对 tableView 的 Segue,但是 tableViewController 的 cellForRowAtIndexPath 永远不会被调用。但是 titleForHeaderInSection 确实被调用,这表明它正在充当 UITableViewDataSource。
有人有什么想法吗?
每个代码请求:
.h:
#import <UIKit/UIKit.h>
@interface PhListTableViewController : UITableViewController <UITableViewDataSource,UITableViewDelegate>
@end
.m:
#import "PhListTableViewController.h"
#import "PhSettings.h"
@interface PhListTableViewController ()
@end
@implementation PhListTableViewController
- (id)initWithStyle:(UITableViewStyle)style
self = [super initWithStyle:style];
if (self)
// Custom initialization
return self;
- (void)viewDidLoad
[super viewDidLoad];
PhSettings *settings=[PhSettings getInstance];
settings.currentViewController = CONV_LIST;
//...
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
#warning Potentially incomplete method implementation.
// Return the number of sections.
return 1;
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
#warning Incomplete method implementation.
// Return the number of rows in the section.
PhSettings *settings=[PhSettings getInstance];
return [settings.myUUIDsList count];
- (NSString*)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
return @"Active:";
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
// Configure the cell...
PhSettings *settings=[PhSettings getInstance];
NSMutableString *s = [NSMutableString string];
[s appendString:@"Alias:"];
[s appendString:[[settings.myUUIDsList objectAtIndex:indexPath.row] userAlias]];
[s appendString:@"Category: "];
[s appendString:[[settings.myUUIDsList objectAtIndex:indexPath.row] category]];
cell.textLabel.text=s;
return cell;
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
//indexPath.row
// ...
@结束
【问题讨论】:
您是否在您的 XIB 中链接了委托和数据源? XIB 仅用于注释的自定义标注。它与启动 segue 没有任何直接关系。这是通过通知完成的。 IE。用户在自定义标注中选择一个按钮,会发生一些往返服务器的事情,当回调完成时,会向 mapViewController 发送通知以启动 segue。 你能贴出你自定义tableView的代码吗?这样我们就可以深入挖掘了。 那么在你replaced the ios supplied callout
之前,一切正常吗?
是的,在将标注替换为自定义标注之前一切正常,但是......可能 numberOfRowsInSection 返回 0。现在检查。
【参考方案1】:
cellForRowAtIndexPath 可能由于以下一个(或多个)原因而无法调用:
-
numberOfRowsInSection 返回 0
numberOfSectionsInTableView 返回 0
数据源设置不正确
heightForRowAtIndexPath 返回 0
表格的高度和/或宽度的框架大小为 0
在您的情况下,我最好的选择是数字 1(在方法中放置一个断点以查看当表要求行数时您返回了多少行)。我最糟糕的经历是调试 5 号 :)
【讨论】:
以上是关于未调用 UITableViewDelegate cellForRowAtIndexPath的主要内容,如果未能解决你的问题,请参考以下文章
未调用 TableViewCell 内的 UIPickerView 委托
UITableViewDelegate dealloc 方法在应用程序仍在运行时被调用
在 UITableView 单元格滑动中选择“删除”,但未调用“提交编辑样式”
是否有任何理由为啥我的 UITableViewCell 的覆盖 setHighlighted 不会被调用但 UITableViewDelegate 方法会?