[英]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
随机showing
或not 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.