我有一个UITableView
,名为tblParentComments
UIView
,类CBox
。
我肯定将我的视图设置为我的表格视图的数据源和代理,我的视图确实实现了这些协议。方法 tableView:numberOfRowsInSection:
会被称为并返回非零值。但是函数tableView:cellForRowAtIndexPath:
从未被调用。
我注意到如果我将方法tableView:cellForRowAtIndexPath:
放在注释中,Xcode就不会停止编译,例如“tableView:cellForRowAtIndexPath:
是必需的” - 应用程序只运行并显示一个空表。
我不明白。有任何想法吗?这是我的观点的代码:
接口CBox.h
@interface CBox : UIView <UITableViewDelegate, UITableViewDataSource>
在实施文件中:
- (id) initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
tblParentComments = [[UITableView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, self.frame.size.width, frame.size.height)];
tblParentComments.delegate = self;
tblParentComments.dataSource = self;
//tblParentComments.userInteractionEnabled = NO;
tblParentComments.backgroundColor = [UIColor clearColor];
tblParentComments.separatorStyle = UITableViewCellSeparatorStyleNone;
tblParentComments.bounces = NO;
[self addSubview:tblParentComments];
}
return self;
}
#pragma mark - UITableViewDelegate + UITableViewDatasource
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
NSLog(@"num of rows = %d", parentComents.count);
return 1; // I set a non-zero value for test
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
.... // I set a breakpoint here, never been called here
}
答案 0 :(得分:0)
YES..i有同样的问题......我刚刚找到了解决方案。
在我的班级中,我使用不同的inits
和不同的参数。
在我的-(void)viewDidLoad
我使用alloc
CGRectZero
表格视图,并且只有在这种情况下,如果你不设置UITableView的FRAME:
numberOfRowsInSection
将被呼叫
cellForRowAtIndexPath
永远不会被打电话
我刚刚设置了 UITableView框架,它可以正常工作。
答案 1 :(得分:0)
正如我在上面的评论中所读到的,我可以搞清楚几件事:
你可能搞砸了代码的一些结构。您应始终遵守视图控制器中的协议 - !不看。或者,我喜欢做什么(因为它让我更好地控制我的代码并保持清洁),独立的协议超出视图控制器 - 意味着创建新对象(模型对象),它将处理表所需的所有内容,并且它将符合表委托和数据源。
如果你明智地组织代码,你应该避免你描述的情况。
另外我相信你可能有2个符合表协议的对象,那就是事情变得丑陋的地方。