我为UITableView
创建了名为mainTableViewgm.h
和mainTableViewgm.m
的.h和.m文件。我正在调用 - initWithFrame
:从我的主视图控制器到此mainTableViewgm.m
实现文件的方法
[[mainTableViewgm alloc]initWithFrame:tableViewOne.frame]
请注意,此tableview位于我的主视图控制器中。但是我已经为tableView创建了单独的文件,并且还在故事板中将自定义类设置为mainTableViewgm
。
-initWithFrame:
方法如下所示
- (id)initWithFrame:(CGRect)frame
{
//NSLog(@"kource data");
self = [super initWithFrame:frame];
if (self)
{
[self setDelegate:self];
[self setDataSource:self];
[self tableView:self cellForRowAtIndexPath:0];
[self tableView:self numberOfRowsInSection:1];
// Initialization code
}
return self;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
NSLog(@"kource data");
return 1;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"kource data2");
UITableViewCell*cellOne =[[UITableViewCell alloc]init];
cellOne.detailTextLabel.text=@"text did appear";
return cellOne;
}
-initWithFrame:
被称为罚款以及此方法中的'if(self)'块。但问题是numberOfRowsInSection:
并且此处未自动调用cellForRowAtIndexPath:
。 kource data
/ kource data2
永远不会出现在日志中。如何加载表格? delegate
/ datasource
设置不正确吗?
我必须提到我还设置了UITableViewDelegate
和UITableviewDataSource
协议:
@interface mainTableViewgm : UITableView <UITableViewDelegate,UITableViewDataSource>
@end
非常感谢帮助。谢谢。
答案 0 :(得分:0)
控制器初始化时未加载您的tableview,因此您无法在init
方法中执行此操作。您必须将代码移至viewDidLoad
方法。
此外,您没有在tableview对象上设置委托和数据源(可能是一种类型,您在视图控制器上设置它们)。它应该是这样的:
- (void)viewDidLoad:(BOOL)animated {
[super viewDidLoad:animated];
[self.tableView setDelegate:self];
[self.tableView setDataSource:self]; // <- This will trigger the tableview to (re)load it's data
}
接下来就是正确实现UITableViewDataSource方法。 UITableViewCell *cellOne =[[UITableViewCell alloc] init];
未返回有效的单元格对象。您应该至少使用initWithStyle:
。并了解如何使用dequeueReusableCellWithIdentifier:forIndexPath:
。典型的实现如下所示:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
// Reuse/create cell
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
// Update cell contents
cell.textLabel.text = @"Your text here";
cell.detailTextLabel.text=@"text did appear";
return cell;
}
答案 1 :(得分:0)
我无法相信我已经做了两年的XCode编程,但仍然遇到了这个问题。
我遇到了与XCode 6.1相同的问题 - 我正在设置我的UITableView
代表&amp; viewWillAppear
函数中的dataSource,但没有任何委托函数正在进行中。
但是,如果我右键点击了故事板上的UITableView
,则委托和dataSource的圈子都是空的。
然后,解决方案是按住CTRL键,然后从每个圈子拖动到包含UIView
的{{1}}的名称:
完成此操作后,我UITableView
愉快地填充了自己。
(那么,我们现在是XCode的v6.1了吗?你认为Apple会做出这件事,你知道吗,友好 ......我会相当的喜欢在我的代码中添加书签......这是一个不错的功能。)