过去几天我一直在玩桌面视图,试图习惯他们,今天我一直在尝试创建一个自定义的uitableviewcell,我正在使用Apple文档中的Table View编程指南工作,这有点奇怪我想要做的事情的问题。
我已经设置了一个自定义单元格nib文件,它上面有两个标签,它们都有标签(0和1)我已经将File owner类更改为将使用它的nib。
从那里我开始编写tableView:cellForRowAtIndexPath:方法,在tableview中显示我的自定义单元格,但正如您将看到的那样,当我为其分配字符串时,只显示我的第一个标签,我只是不知道为什么。 ..
自定义单元格笔尖
tableView:cellForRowAtIndexPath:method
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
//cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:CellIdentifier] autorelease];
[[NSBundle mainBundle] loadNibNamed:@"ManufactureSearchCell" owner:self options:nil];
cell = vehicleSearchCell;
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
self.vehicleSearchCell = nil;
}
// Configure the cell...
cell.selectionStyle = UITableViewCellSelectionStyleNone;
if(indexPath.section == 0)
{
if(indexPath.row == 0)
{
UILabel *label;
label = (UILabel *)[cell viewWithTag:0];
label.text = [[NSString alloc] initWithString:@"Manufacture :"];
label = (UILabel *)[cell viewWithTag:1];
label.text = [[NSString alloc] initWithString:@"empty"];
}
else if(indexPath.row == 1)
{
//.....
任何帮助将不胜感激:)
答案 0 :(得分:5)
请注意使用viewWithTag和0.这是所有视图的默认标记,因此请仔细检查您实际上是从中获取标签,而不是单元格的背景视图,附件视图或添加到其他任何其他默认视图细胞。它可能会导致问题。
如果您正在重用该单元格,我建议您创建一个自定义UITableViewCell子类并通过IB链接它们。如果你没有重复使用那个单元格,并希望它只显示一次,那么肯定会采用Karoly的建议将这些标签作为IBOutlets。
答案 1 :(得分:0)
我只看到提供给我的代码中的一件事。看起来你正在覆盖你的标签价值。两者中哪一个显示出来?
UILabel *label1;
label = (UILabel *)[cell viewWithTag:0];
label.text = [[NSString alloc] initWithString:@"Manufacture :"];
UILabel *label2
label2 = (UILabel *)[cell viewWithTag:1];
label2.text = [[NSString alloc] initWithString:@"empty"];
我会为了简单起见而宣布两个标签。或者你已经这样做了吗?其他一切都在运作吗?你是以编程方式创建这些标签吗?如果不是,为什么不通过IB连接它们并给它们唯一的名称并以这种方式访问它们?你的CellViewStyle是什么设置的?看起来你有一条线可以将它设置为注释掉的东西,有什么特别的原因吗?您还可以在自定义单元格的.xib文件中检查您的属性,看看是否有需要更改的内容。
答案 2 :(得分:0)
这让我感到奇怪 - 为什么使用
label.text = [[NSString alloc] initWithString:@"Manufacture :"];
而不是
label.text = @"Manufacture :";
就是这样,你不释放你的琴弦。使用@“xxx”短手创建一个自动释放的字符串。不确定这是你的问题的原因,但使用字符串的固定内存管理可以产生像你看到的效果。所以清理它将是一个良好的开端。
此外,请确保在IB中您使单元格引用了文件所有者的vehicleSearchCell属性。更多的是在黑暗中刺伤。