这是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];
}
答案 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创建一些对象,那么你就有责任释放它们。