tableView:cellForRowAtIndexPath:永远不会被调用

时间:2012-08-20 17:43:10

标签: objective-c cocoa-touch uitableview

我有一个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
}

2 个答案:

答案 0 :(得分:0)

YES..i有同样的问题......我刚刚找到了解决方案。

在我的班级中,我使用不同的inits和不同的参数。

在我的-(void)viewDidLoad我使用alloc CGRectZero表格视图,并且只有在这种情况下,如果你不设置UITableView的FRAME:

  • numberOfRowsInSection将被呼叫

  • cellForRowAtIndexPath永远不会被打电话

我刚刚设置了 UITableView框架,它可以正常工作。

答案 1 :(得分:0)

正如我在上面的评论中所读到的,我可以搞清楚几件事:

你可能搞砸了代码的一些结构。您应始终遵守视图控制器中的协议 - !不看。或者,我喜欢做什么(因为它让我更好地控制我的代码并保持清洁),独立的协议超出视图控制器 - 意味着创建新对象(模型对象),它将处理表所需的所有内容,并且它将符合表委托和数据源。

如果你明智地组织代码,你应该避免你描述的情况。

另外我相信你可能有2个符合表协议的对象,那就是事情变得丑陋的地方。