为什么虚拟文本无法加载到我的单元格?

时间:2010-08-20 09:08:04

标签: objective-c iphone iphone-sdk-3.0

这是tableView,你可以看到,哪个单元格有两个部分,左边一个是leftUIView,右边一个是右边的uIView。红色和绿色可以显示,但我创建的rightLabel无法成功显示。我的代码出了什么问题?谢谢。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

        static NSString *SectionsTableIdentifier = @"SectionsTableIdentifier";

    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:SectionsTableIdentifier];
    if (cell == nil) { 
        cell = [[[UITableViewCell alloc]
                 initWithStyle:UITableViewCellStyleSubtitle 
                 reuseIdentifier:SectionsTableIdentifier] autorelease];
    }

    cell.textLabel.textColor = [UIColor whiteColor];
    UIView *rightUIView = [[UIView alloc] initWithFrame:CGRectMake(160, 0, 160, cell.frame.size.height)];
    [rightUIView setBackgroundColor:[UIColor greenColor]];
    UIView *leftUIView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 160, cell.frame.size.height)];
    [leftUIView setBackgroundColor:[UIColor redColor]];

    UILabel *rightLabel = [[UILabel alloc] init];
    [rightLabel setText:@"dummy"];
    [rightUIView addSubview:rightLabel];

    [cell addSubView:leftUIView];
    [cell addSubView:rightUIView];

}

1 个答案:

答案 0 :(得分:1)

您的代码的第一个问题是,每次请求单元格时都会创建单元格的子视图 - 如果您在单元格中往返滚动表格会有一堆子视图 - 当然这并不好。您必须只创建一次单元格子视图 - 在创建单元格时,之后只为它们设置适当的值:

const int kRightViewTag = 100;
const int kRightLabelTag = 200;
...
if (cell == nil) { 
    // Create everything here
    cell = [[[UITableViewCell alloc]
             initWithStyle:UITableViewCellStyleSubtitle 
             reuseIdentifier:SectionsTableIdentifier] autorelease];
    cell.textLabel.textColor = [UIColor whiteColor];

    UIView *rightUIView = [[UIView alloc] initWithFrame:CGRectMake(160, 0, 160, cell.frame.size.height)];
    rightUIView.tag = kRightViewTag;
    [rightUIView setBackgroundColor:[UIColor greenColor]];
    [rightUIView release]; // Do not forget to release object you allocate!!

    UIView *leftUIView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 160, cell.frame.size.height)];
    [leftUIView setBackgroundColor:[UIColor redColor]];
    [leftUIView release]; // Do not forget to release object you allocate!!

    UILabel *rightLabel = [[UILabel alloc] initWithFrame:leftUIView.bounds];   
    rightLabel.tag  = kRightLabelTag;
    [rightUIView addSubview:rightLabel];
    [rightLabel release];
}
// Setup values here
UILabel* rightLabel = (UILabel*)[[cell viewWithTag:kRightViewTag] viewWithTag:kRightLabelTag];
rightLabel.text = @"dummy";

第二件事是你没有在任何地方设置标签的框架(我已经固定了上面的框架)所以它很可能有零大小的框架,这就是你无法看到它的原因。

第三个问题是您分配视图但不释放它们 - 所以它们只是泄漏。不要忘记,如果你使用alloc,new或copy创建一些对象,那么你就有责任释放它们。