我的目标是在同一个单元格中显示2个字符串,其中一个左对齐,另一个右对齐。我所附的代码只是在表视图,但它打破了,当你向上/向下滚动。我需要这个工作在一个表,可以滚动。有人提到使用CustomUITableViewCells而不是我目前的方法,有人能指出我的例子吗?
// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
UILabel *rank = [[UILabel alloc] initWithFrame:CGRectMake(5, 5, 100, 20];
[rank setTag:5];
[cell.contentView addSubview:rank];
[rank release];
UILabel *item = [[UILabel alloc] initWithFrame:CGRectMake(110, 5, 220, 20];
[item setTextAlignment:UITextAlignmentRight];
[item setTag:6];
[cell.contentView addSubview:item];
[item release];
}
UILabel *rank = (UILabel *)[cell viewWithTag:5];
UILabel *item = (UILabel *)[cell viewWithTag:6];
rank.text = @"leftside";
item.text = @"rightside";
}
Any ideas and thoughts greatly appricated, thanks for lookin
这个问题是由于dequeueReusableCellWithIdentifier
。当单元格被重用时,当您上下滚动时,它将导致主要问题,因为标签被添加为单元格和的子视图,它们不具有单元格的属性。但是,如果您使用cell.textLabel
作为您的标签,它不会引起像您现在面临的问题,但是您不能添加多个标签。
你有两个解决方案。
-
在您的情况下,您需要停止为每个细胞使用相同的
cellIdentifier
,并为每个细胞使用不同的标识符,以便它们不会被重用。如果您在tableView
中有非常少的行,这将是有用的,否则它将被证明是低效的。 -
一个更好的解决方案是子类
UITableViewCell
并在其代码中添加这两个标签,然后使用该UITableViewCell与dequeueReusableCellWithIdentifier
。这只是一小部分工作,你可以重复使用细胞。如果你的tableview中有大量的行,这将非常有用。通过本教程学习如何用2个标签子类
UITableViewCell
。您需要使用
- (void)layoutSubviews
方法并将这些标签添加到您的自定义UITableViewCell
子类中。
记住引用这个customUITableViewCell
而不是默认的uitableviewcell当你加载tableView
。你的UILabels
不会再乱了。
。
嗯,我粘贴了你发布的相同代码,我得到了2个编译器错误,提到)在available的分配中缺失,因为我已经清除了它,它编译并成功启动。
我所面临的唯一例外和崩溃,这是由于数据源方法不返回任何单元格。这在给定的代码中也是缺失的。
除此之外,代码在我这端工作得很好,即使我滚动了很多次也没有崩溃。
因此,只需再次验证您的代码,否则应该有另一个问题,关于数组提供的数据源,并检查section中的行数
我将使用自定义的UITableViewCell
。最简单的方法是下载一个示例项目,然后复制和粘贴,以了解如何设置自定义单元格。这是一个很好的教程,包含了一个示例项目。您可以在cellForRowAtIndexPath
方法中使用if (indexPath.row == int)
来确定哪些单元格应该是标准单元格,哪些应该是您的自定义单元格。