在iOS7中,cell.selectedBackgroundView未显示
正在将一个iOS6应用程序转换为iOS7,他们正在使用它来设置分组的tableview样式在iOS7中,cell.selectedBackgroundView未显示,ios,objective-c,uitableview,Ios,Objective C,Uitableview,正在将一个iOS6应用程序转换为iOS7,他们正在使用它来设置分组的tableview样式 cell.backgroundView = aView; cell.selectedBackgroundView = bView; 当应用程序加载时,它会正确加载backgroundView,但当我单击单元格时,selectedBackgroundView在iOS7中不再工作。单击会选择单元格以便工作,但selectBackgroundView不会显示 有什么建议吗?我唯一能想到的是不要
cell.backgroundView = aView;
cell.selectedBackgroundView = bView;
当应用程序加载时,它会正确加载backgroundView,但当我单击单元格时,selectedBackgroundView在iOS7中不再工作。单击会选择单元格以便工作,但selectBackgroundView不会显示
有什么建议吗?我唯一能想到的是不要使用selectedBackgroundView,只要在每次选中和取消选中子视图时将其添加和删除到单元格中即可
///更新///
把这个放在我的CellForRowatinex中,仍然不起作用
UIView *bgColorView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
bgColorView.backgroundColor = [UIColor colorWithRed:(76.0/255.0) green:(161.0/255.0) blue:(255.0/255.0) alpha:1.0]; // perfect color suggested by @mohamadHafez
bgColorView.layer.masksToBounds = YES;
cell.selectedBackgroundView = bgColorView;
////更新2///////////
如果我把这个放进我的手机里
cell.selectedBackgroundView = nil;
cell.backgroundView = nil;
UIView *bgColorView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
bgColorView.backgroundColor = [UIColor colorWithRed:(76.0/255.0) green:(161.0/255.0) blue:(255.0/255.0) alpha:1.0]; // perfect color suggested by @mohamadHafez
bgColorView.layer.masksToBounds = YES;
cell.selectedBackgroundView = bgColorView;
UIView *bgSColorView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
bgSColorView.backgroundColor = [UIColor colorWithRed:(106.0/255.0) green:(201.0/255.0) blue:(255.0/255.0) alpha:1.0]; // perfect color suggested by @mohamadHafez
bgSColorView.layer.masksToBounds = YES;
cell.backgroundView = bgSColorView;
两者都将cell.background显示为bgSColorView,但当我单击该单元格时,什么都没有发生(即selectedBackgroundView没有显示?为什么selectedBackgroundView没有升级和显示
///更新3////
我把它放在我的setSelectin:animation:for我的cell类中(删除了上面的内容)
现在它看起来是正确的,正如我所希望的。但当我从背景中单击任何单元格Boo和selectionBackgroundView时,它们会立即被删除、消失。每当我无法在tableView中使用它时:cellForRowAtIndexPath:我只是将UITableViewCell子类化,并覆盖setSelected:animated方法,如下所示:
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
[super setSelected:selected animated:animated];
// Configure the view for the selected state
UIImage *image = [UIImage imageNamed:@"selected_cell.png"];
self.selectedBackgroundView = [[UIImageView alloc]initWithImage:image];
}
我只是在另一个项目中尝试了这个,但没有成功..哈哈。我现在用的是:
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
[super setSelected:selected animated:animated];
if (selected) {
contentView.backgroundColor = SharedColors.Blue.ToUIColor ();
} else {
contentView.backgroundColor = SharedColors.Black.ToUIColor ();
}
}
我最近有这个问题 发现我的问题在我的
.xib
中,我已将选择样式设置为UITableViewCellSelectionStyleNone
一旦我设置了self.selectionStyle=UITableViewCellSelectionStyleDefault;
MySelectedBackgroundView开始正确显示
所以我做了这个
- (void)awakeFromNib
{
[super awakeFromNib];
self.selectionStyle = UITableViewCellSelectionStyleDefault;
UIView *selectedBackgroundView = [[UIView alloc] init];
selectedBackgroundView.backgroundColor = [UIColor redColor];
self.selectedBackgroundView = selectedBackgroundView;
}
但是所有这些都是在构建tableview时设置的。我会做所有这些,而不是每次选择单元格时。如果我在CellForRow中设置selectedBackgroundView,我就不必在每次设置selectedBackgroundView时设置它了。对吗?你是对的。我不确定为什么你的单元格。selectedBackgroundView=bView也不工作,所以我只是想让你知道另一种可能是使用此委托方法:-(void)tableView:(UITableView*)tableView willDisplayCell:(UITableViewCell*)rowatindexpath:(nsindepath*)的单元格在绘制单元格之前,它会被调用,这可能是另一个很好的解决方法。抱歉:P luckIn 7 Apple的Best对单元格背景做了一些处理。他们在背景的“上方”插入了一个不透明的白色层,只有在CellForRowatineXpath内的单元格上使用BackBackgroundColor时,它才会消失(在XIB中执行此操作是不够的)。不确定这会如何影响背景图像,但您可能需要将背景颜色设置为“清除”。您是否正在子类化
UITableViewCell
?是的,它正在子类化。但我刚刚将其更改为子类UITableViewCell,结果仍然相同。是否还支持编辑模式(多单元格选择)具有单元格自定义背景色?
- (void)awakeFromNib
{
[super awakeFromNib];
self.selectionStyle = UITableViewCellSelectionStyleDefault;
UIView *selectedBackgroundView = [[UIView alloc] init];
selectedBackgroundView.backgroundColor = [UIColor redColor];
self.selectedBackgroundView = selectedBackgroundView;
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
var view = UIView(frame: self.bounds)
view.backgroundColor = UIColor.redColor()
self.selectedBackgroundView = view
}