我加载了一个包含核心数据数据的tableview。
它加载了文本。
每个单元格都有一个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");
}
.........
但是当它测试时,它并不总是做正确的事情。它只是随机打印出showing
或not showing
。而且我知道它是否应该显示,因为它会在单元格上显示图像。这可能是什么原因?
只是侧面注释,用户可以将图像设置为隐藏或不隐藏在不同视图中,但是tableview始终显示正确的数据,这意味着它显示图像可见或正确隐藏,就在我测试时,它并不总是工作。
感谢您的帮助!
答案 0 :(得分:2)
您已创建名为@property
的{{1}}。那不行。
您应该使用cell
变量或自定义单元格中的变量:
UITableViewCell
此外,您对字符串的处理效率不高。请改用CustomCell *cell = [tableView dequeue...];
:
stringWithFormat
另外,检查视图是否隐藏以通知您的应用程序逻辑是非常糟糕的做法。相反,您应该拥有一个强大的数据模型并查询数据模型。在您的情况下,如果对象有图像,则应查询相应的cell.mainLabel.text = [NSString stringWithFormat:@"%@ %@",
handguns.brands, handguns.model];
对象。
答案 1 :(得分:1)
您将出列的单元格分配给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”或类似的东西?如果您仍然遇到问题,那么您的代码将更加简单易懂。如果你不再遇到这个问题,你可以一次一件地添加自定义的东西,直到找到破坏的东西。