我的目标是在同一个单元格中显示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中有大量行,这将非常有用.
通过THIS TUTORIAL了解如何使用2个标签继承UITableViewCell.
您将需要使用方法 – (void)layoutSubviews并将这些标签添加到自定义UITableViewCell子类.
并且在加载tableView时请记住引用此customUITableViewCell而不是默认的uitableviewcell.你的UILabels不会再搞砸了.