2

我有一个UITableView,命名tblParentComments在一个UIViewCBox中。

我已经明确地将我的视图设置为我的表视图的数据源和委托,并且我的视图确实实现了这些协议。该方法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
}
4

2 回答 2

0

当我阅读上面的评论时,我可以弄清楚几件事:

您可能弄乱了代码的一些结构。您应该始终遵守视图控制器中的协议 - !不查看。或者,我喜欢做的事情(因为它让我可以更好地控制我的代码并保持事情干净),将协议从视图控制器中分离出来 - 意味着创建新对象(模型对象),它将处理表所需的所有内容并且它将符合表委托和数据源。

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

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

于 2014-07-11T07:55:30.593 回答
0

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

在我的课堂上,我使用不同inits的参数。

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

  • 将被numberOfRowsInSection调用

  • cellForRowAtIndexPath永远不会被召唤

我刚刚设置了我的UITableView 框架,它的工作原理。

于 2014-07-11T07:35:14.133 回答