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];
【问题讨论】:
我猜是因为UITableView
的datasource
更重要,而且它是必需的。尝试使用table.datasource=self.
,不要忘记添加方法cellForRowAtIndexPath
和numberOfRowsInSection
这也没有运气:(
@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 代表没有被调用的主要内容,如果未能解决你的问题,请参考以下文章
从自定义单元格返回 NSIndexPath ? (UITableView)
当 didChangeObject 被调用 NSFetchedResultsController 时,UITableView 没有更新