繁体   English   中英

UITableView单元格提供了错误的信息

[英]UITableView cell gives wrong information

我用来自核心数据的数据加载一个表视图。 它会加载文本。 每个单元都有一个uiimageview。 表格调用cellForRow:它要么将图像设置为隐藏,要么不隐藏(取决于核心数据应显示的内容)。

码:

-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:
(NSIndexPath *)indexPath{

static NSString * identifier = @"identifier";

self.cell = [tableView dequeueReusableCellWithIdentifier:identifier];

HuntingRifleGuns *handguns = [self.tableArray objectAtIndex:indexPath.row];

NSString *brandModel = [[handguns.brand stringByAppendingString:@" "] stringByAppendingString:handguns.model];

self.cell.mainLabel.text = brandModel;

self.cell.nicknameLabel.text = handguns.nickname;
//Right below me, is where is set the imageView to hidden, or not hidden. 
self.cell.alert.hidden = handguns.showBadge.boolValue;

self.cell.alert.image = [UIImage imageNamed:@"tvicon.png"];

return self.cell;
}

我的问题是:如果我在表视图上有1个单元格,它可以正常工作,但是如果我在表上有1个以上的单元格,它就起作用了。

我想检查一下删除单元格的图像是否被隐藏:

-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {

if (editingStyle == UITableViewCellEditingStyleDelete) {        

    if (!self.cell.alert.isHidden) {


        NSLog(@"showing");

    }
 else{

NSLog(@"Not showing");
}
     .........

但是当它测试时,它并不总是做正确的事情。 它只是打印not showing随机showingnot showing 而且我知道它是否应该显示,因为它在单元格上显示了图像。 这可能是什么原因? 只是附带说明,用户可以将图像设置为隐藏或不隐藏在不同的视图中,但是tableview总是显示正确的数据,这意味着它显示图像正确可见或隐藏,只是在我测试时,它并不总是工作。

谢谢您的帮助!

您已经创建了一个名为cell@property 那行不通。

您应该只使用一个UITableViewCell变量或一个自定义单元格:

CustomCell *cell = [tableView dequeue...];

另外,您对字符串的处理在内存方面不是很有效。 使用stringWithFormat代替:

cell.mainLabel.text = [NSString stringWithFormat:@"%@ %@",
       handguns.brands, handguns.model]; 

另外,检查视图是否隐藏以通知您的应用程序逻辑也是非常不好的做法。 相反,您应该拥有一个健壮的数据模型并改为查询该数据模型。 在您的情况下,您应该查询适当的handguns对象是否具有图像。

您正在将出队单元格分配给self的属性很奇怪。 几乎可以肯定,这绝不会是您认为的那样,因为以非确定的方式从-tableView:cellForRowAtIndexPath:请求单元格。 您应该将出队单元格分配给具有本地范围的变量。 使用-tableView:commitEditingStyle:forRowAtIndexPath:的参数来检索要使用的单元格。 例如:

-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
  if (editingStyle == UITableViewCellEditingStyleDelete) {
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    if ([[[cell textLabel] text] isEqualToString:@"foo"]) {
      NSLog(@"showing");
    } else{
      NSLog(@"Not showing");
    }
  }
}

同样,在调试此类问题时,将问题简化为仍会导致问题的最简单方法通常很有用。 如果使用默认外观的简单UITableViewCell而不是使用自定义单元格或在那里执行的操作,会发生什么情况。 而不是隐藏或显示已添加到单元格的图像视图,您只需将其默认文本更改为“ foo”或“ bar”或类似的内容? 如果您仍然遇到问题,那么这里的代码将更加简单和易于解释。 如果您不再遇到问题,则可以一次将您的自定义内容添加回一件,直到找到破坏内容的修改。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM