我正在为我的核心数据表视图项目使用自定义TableViewCell。在自定义表视图单元类的layoutSubviews
方法中,我创建了一个名为MMCircles
的UIView的子类,并将其分配给_unreadIndicator属性,该属性将添加到自定义表视图的contentView
中细胞,像这样
if(self.coolColor == [UIColor greenColor]){
_unreadIndicator = [[MMCircles alloc] initWithFrame:CGRectMake(0, 0, 18, 18) andColor:[UIColor greenColor]];
_unreadIndicator.circleColor = [UIColor greenColor];
}else if(self.coolColor == [UIColor redColor]){
NSLog(@"unreadIndicator nil, creating red");
_unreadIndicator = [[MMCircles alloc] initWithFrame:CGRectMake(0, 0, 18, 18) andColor:[UIColor redColor]];
_unreadIndicator.circleColor = [UIColor redColor];
}else if ...
[self.contentView addSubview:_unreadIndicator];
最终结果是每当我创建表视图条目时,我都会添加各种颜色的圆圈(在表格单元主表视图控制器的列表中)。让我们说这个例子,我添加一个greenColor圆圈。如果我触摸单元格来编辑我创建的内容,它会在另一个视图控制器中打开,我可以选择为该单元格的_unreadIndicator选择另一种颜色。假设我尝试将其red
。实际发生的是红色圆圈正在绿色圆圈上方添加。例如,如果我在上面的方法中设置较小的红色圆圈的大小,您可以清楚地看到绿色的红色顶部。如果我把红色做成相同的尺寸,它会完全覆盖绿色,没有人知道任何差异。但是,我想让用户选择将圆圈设置为clearColor
,当发生这种情况时,显然会出现问题,因为原始颜色只是闪耀。因此,我必须删除_unreadIndicator(UIView的子类)而不是掩盖它。
尝试删除unreadIndicator
我尝试了几种不同的方法来删除这些圈子,但都没有成功。在上面的代码之前,我添加了以下代码,但它没有用。
[_unreadIndicator removeFromSuperview];
_unreadIndicator = nil;
此外,cellForRowAtIndexPath
(在表视图控制器中)在用户编辑单元格后调用(可能包括更改颜色),因此在设置新颜色之前,我尝试从superview中删除unreadIndicator 。再次,这不起作用
switch ([joke.mood intValue]) {
case 0:
[cell.unreadIndicator removeFromSuperview];
cell.coolColor = [UIColor greenColor]; //user has chosen green during edit, therefore remove old indicator
最后,在FetchedResultsController方法didChangeObject:AtIndexPath:forChangeType:newIndexPath
中,我还尝试删除旧的圆圈颜色(没有成功)。我在这里尝试过,因为用户在尝试更改圆形颜色(以及其他内容)时正在编辑表格单元格,我假设此代码被触发
case NSFetchedResultsChangeUpdate:{
Event *changedJoke = [self.fetchedResultsController objectAtIndexPath:indexPath];
MMTableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
cell.unreadIndicator = nil;
[cell.unreadIndicator removeFromSuperview];
cell.textLabel.text = changedJoke.mnemonic;
}
最终结果是我只能掩盖圆圈,这是不够好的,因为我需要创建圆圈的选项,而clearColor
无法覆盖任何圆圈其他颜色。
如何删除这个小子视图?
答案 0 :(得分:1)
您似乎重置_unreadIndicator
而不在superview中删除它。所以你失去了早期视图的句柄。尝试在创建和添加新视图之前删除视图。
if(self.coolColor == [UIColor greenColor]){
if(_unreadIndicator)
{
[_unreadIndicator removeFromSuperView];
}
_unreadIndicator = [[MMCircles alloc] initWithFrame:CGRectMake(0, 0, 18, 18) andColor:[UIColor greenColor]];
_unreadIndicator.circleColor = [UIColor greenColor];
}else if(self.coolColor == [UIColor redColor]){
NSLog(@"unreadIndicator nil, creating red");
if(_unreadIndicator)
{
[_unreadIndicator removeFromSuperView];
}
_unreadIndicator = [[MMCircles alloc] initWithFrame:CGRectMake(0, 0, 18, 18) andColor:[UIColor redColor]];
_unreadIndicator.circleColor = [UIColor redColor];
}else if ...
[self.contentView addSubview:_unreadIndicator];