P5y*_*cH0 69 interface-builder uitableview uiview ios
我在界面构建器中有一个简单的tableViewCell构建.它包含一个包含图像的UIView.现在,当我选择单元格时,会显示默认的蓝色选择背景,但我的UIView的backgroundColor消失了.
我的UITableViewCell的实现文件没有做任何特别的事情.它只是init和&返回self,我在setSelected中所做的就是调用super.
如何在选择tableView时显示我的UIView backgroundColor?
Bro*_*oks 108
这里的问题是[超级]实现
- (void) setSelected:(BOOL) selected animated:(BOOL) animated;
Run Code Online (Sandbox Code Playgroud)
将UITableViewCell中的所有背景颜色设置为rgba(0,0,0,0).为什么?也许是为了让我们大汗淋漓?
并不是整个视图都消失了(事实证明,如果更改视图图层边框属性,则会保留这些属性)
这是触摸单元格产生的函数调用序列
所以你的选择是
不幸的是,在setHighlighted中重新断言背景颜色没有任何作用,因为在第一次调用setSelected所有背景颜色设置为[r:0 b:0 g:0 a:0]之前调用setHighlighted.
// TODO:详细说明如何覆盖setSelected(敬请关注)
mie*_*tus 72
- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated
{
UIColor *backgroundColor = self.channelImageView.backgroundColor;
[super setHighlighted:highlighted animated:animated];
self.channelImageView.backgroundColor = backgroundColor;
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
UIColor *backgroundColor = self.channelImageView.backgroundColor;
[super setSelected:selected animated:animated];
self.channelImageView.backgroundColor = backgroundColor;
}
Run Code Online (Sandbox Code Playgroud)
ZeC*_*dea 16
此前我已经照@ P5ycH0说(1x1图片拉伸),但以下@Brooks我想,覆盖-(void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated
在我的自定义UITableViewCell
执行和呼叫后重置的背景颜色[super setHighlighted:highlighted animated:animated];
使我的背景颜色选择单元格时/高亮
-(void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated {
[super setHighlighted:highlighted animated:animated];
myView.backgroundColor = myColor;
}
Run Code Online (Sandbox Code Playgroud)
kub*_*lay 16
当您UITableViewCell
被选中时,您应该注意两种状态:Highlighted
和Selected
.
因此,对于具有自定义单元类的子场景UITableViewCell
,您可以轻松地覆盖这两种方法以避免这种情况(Swift):
class MyCell: UITableViewCell {
@IBOutlet var myView: UIView!
override func setHighlighted(highlighted: Bool, animated: Bool) {
let myViewBackgroundColor = myView.backgroundColor
super.setHighlighted(highlighted, animated: animated)
myView.backgroundColor = myViewBackgroundColor
}
override func setSelected(selected: Bool, animated: Bool) {
let myViewBackgroundColor = myView.backgroundColor
super.setSelected(selected, animated: animated)
myView.backgroundColor = myViewBackgroundColor
}
}
Run Code Online (Sandbox Code Playgroud)
这个问题可以(最终)在iOS 13中得到解决。在iOS 13 beta 3发行说明中找到了这一甜蜜的段落。
当单元格变为突出显示或选中状态时,UITableViewCell类不再更改contentView及其任何子视图的backgroundColor或isOpaque属性。如果要在contentView内部(包括其中)的单元格的任何子视图上设置不透明的backgroundColor,则该单元格突出显示或选中时的外观可能会受到影响。解决子视图问题的最简单方法是确保将其backgroundColor设置为nil或clear,并且其opaque属性为false。但是,如果需要,您可以覆盖setHighlighted(:animated :)和setSelected(:animated :)方法,以在移入或移出突出显示和选定状态时手动更改子视图上的这些属性。(13955336)
归档时间: |
|
查看次数: |
24959 次 |
最近记录: |