UITableView 代表没有被调用

Posted

技术标签:

【中文标题】UITableView 代表没有被调用【英文标题】:UITableView Delegates are not getting called 【发布时间】:2012-08-29 05:11:57 【问题描述】:

我在运行时创建一个视图并添加一个 UITableView 作为它的子视图。 我还将 tableview 的委托定义为 self 。

但仍然没有调用 UITableView Delegates

@interface cViewController : UIViewController

RouteShowView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)];
[RouteShowView setBackgroundColor:[UIColor blueColor]];

table = [[UITableView alloc] initWithFrame:CGRectMake(0, 50, 320, 410) style:UITableViewStylePlain];
table.delegate = self;
UIButton * Go = [UIButton buttonWithType:UIButtonTypeRoundedRect];
Go.frame = CGRectMake(0, 4, 70, 42);
[Go setTitle:@"<< BACK" forState:UIControlStateNormal];
[Go addTarget:self action:@selector(goBack) forControlEvents:UIControlEventTouchUpInside];
[Go setBackgroundColor:[UIColor blackColor]];

[RouteShowView addSubview:table];
[RouteShowView addSubview:Go];

[self.view addSubview:RouteShowView]; 

【问题讨论】:

我猜是因为UITableViewdatasource 更重要,而且它是必需的。尝试使用table.datasource=self.,不要忘记添加方法cellForRowAtIndexPathnumberOfRowsInSection 这也没有运气:( @WakkaoW 尝试数据源也不行吗? @iNoob 是的,仍然没有运气.....但是感谢数据源无论如何都需要。但仍然没有调用 numberOfRowsInSection @WakkaoW,这很奇怪。我只是尝试包含数据源并将行数返回为 3。虽然我尝试使用 self.view addSubView:table 而不是您的 RouteShowView 【参考方案1】:

假设您在 .h 文件中添加了 UITableViewDelegate, UITableViewDataSource...我认为您在 .m 文件中错过了这段代码

table.dataSource = self;

【讨论】:

【参考方案2】:

缺少的东西是

//.h file
@interface SimpleTableView : UITableView <UITableViewDelegate, UITableViewDataSource>


@end

// in .m file
table = [[UITableView alloc] initWithFrame:CGRectMake(0, 50, 320, 410) style:UITableViewStylePlain];

// set delegated object
table. delegate = self;

// set source for data
table.dataSource = self;

并实现 UITableView 文档中定义的@required 协议

@protocol UITableViewDataSource<NSObject>

@required

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

【讨论】:

【参考方案3】:

首先尝试通过 xcode 上的代码完成来检查委托方法,如果您在类中获得了正确的委托,xcode 会自动检测您的委托方法。

我猜你可能没有被声明

@interface SimpleTableView : UITableView <UITableViewDelegate, UITableViewDataSource>

【讨论】:

以上是关于UITableView 代表没有被调用的主要内容,如果未能解决你的问题,请参考以下文章

UITableView滚动式cell错位

从自定义单元格返回 NSIndexPath ? (UITableView)

当 didChangeObject 被调用 NSFetchedResultsController 时,UITableView 没有更新

UITableView 的 shouldIndentWhileEditingRowAtIndexPath: 没有被调用

UITableView 原型单元上的自定义附件视图未触发

UITableView tableView:cellForRowAtIndexPath:没有被调用