我的目标是在同一个单元格中显示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
答案 0 :(得分:2)
此问题是由于dequeueReusableCellWithIdentifier
。当单元格被重复使用时,当您向上和向下滚动时,它会导致严重的问题,因为标签被添加为单元格的子视图,它们没有单元格的属性。但是,如果您使用cell.textLabel
作为标签,它不会导致您现在面临的问题,但您不能添加多个标签。
你有两个解决方案。
在您的情况下,您需要停止为每个单元使用相同的cellIdentifier
,并为每个单元使用不同的标识符,以便它们不会被重用。如果tableView
中的行数非常少,或者结果效率很低,这会很有用。
更好的解决方案是子类 UITableViewCell
并在其代码中添加这两个标签,然后将该UITableViewCell与dequeueReusableCellWithIdentifier
一起使用。这只是一小部分工作,您可以重复使用单元格。如果您的tableview中有大量行,这将非常有用。
浏览THIS TUTORIAL,了解如何使用2个标签继承UITableViewCell
。
您需要使用方法- (void)layoutSubviews
并将这些标签添加到自定义UITableViewCell
子类中。
请记住在加载customUITableViewCell
时引用此tableView
而不是默认的uitableviewcell。你的UILabels
不会再搞砸了。
答案 1 :(得分:0)
我会使用自定义UITableViewCell
。最简单的方法是只下载一个示例项目,然后复制并粘贴以查看如何设置自定义单元格。 This is包含示例项目的好教程。您可以在if (indexPath.row == int)
方法中使用cellForRowAtIndexPath
来确定哪些单元格应该是标准单元格,哪些单元格应该是您的自定义单元格。
答案 2 :(得分:0)
好吧,我已经粘贴了你发布的相同代码,并且我在UILable的分配中遗漏了2个编译错误,提到了),并且我已经清除了它,编译并启动了成功。
我遇到的唯一例外和崩溃是由于数据源方法没有返回任何单元格。在给定的代码中也缺少这一点。
除此之外,即使我多次滚动,代码也能在我的最终完成并且没有一次崩溃。
因此,只需再次验证您的代码,或者应该有关于数组提供的数据源的另一个问题,并检查部分中的行数。