我在接口构建器中有一个简单的tableViewCell构建. 它包含一个包含图像的UIView. 现在,当我 Select 单元格时,会显示默认的蓝色 Select 背景,但我的UIView的backmentColor消失了.

我的UITableViewCell实现文件没有做任何特殊的事情.它只是初始化&返回self,而我在setSelected中所做的一切就是调用Super.

当 Select tableView时,如何让UIView背景色显示?

推荐答案

这里的问题是,[超级]执行

- (void) setSelected:(BOOL) selected animated:(BOOL) animated;

将UITableViewCell中的所有背景 colored颜色 设置为RGBA(0,0,0,0).为什么?也许是为了让我们都汗流浃背?

并不是整个视图都消失了(事实证明,如果更改视图图层边界属性,这些属性将被保留)

下面是接触单元格产生的函数调用序列

  1. 设置高亮显示
  2. 触碰结束
  3. 布局子视图
  4. Will SelectRowAtIndexPath(委托方)
  5. 集合选定(!这是所有视图背景色被告知要消失的位置)
  6. didSelectRowAtIndexPath(委托端)
  7. setSelected(再次)(有趣的是,在此调用中未清除背景色.(这个超级方法的内部有什么奇怪之处?)
  8. 布局子视图 (again)

所以你的 Select 是

  1. 在不呼叫[super setSelected:selected animated:animated]的情况下覆盖- (void) setSelected:(BOOL) selected animated:(BOOL) animated;.这将为您提供技术上最正确的实现,因为a)代码被封装在UITableViewCell子类中,b)因为它只在需要时被调用(需要时调用两次,但可能有一种解决方法).缺点是你必须重新实现所有必要的功能(而不是不必要的 colored颜色 清除功能).现在还不要问我如何正确地覆盖你.现在你的猜测和我的一样好(耐心点,等我弄明白后我会编辑这个答案).
  2. 重新断言didSelectRowAtIndexPath的背景色.这不是很好,因为它将应该是实例代码的内容放在实例之外.它的优点是只有在需要的时候才会调用,而不是.
  3. Re-assert the background colors in 布局子视图. This is not great at all because 布局子视图 is called like A MILLION times! It is called every time the table refreshes, every time it scrolls, every time you grandmother gets a perm... like seriously, a million times. That means there is a lot of unnecessary background re-assertions and a lot of extra processing overhead. On the bright side it puts the code inside the UITableViewCell subclass, which is nice.

不幸的是,重新断言setHighlightted中的背景色没有任何作用,因为在第一次调用setSelected将所有背景色设置为[r:0b:0g:0a:0]之前调用了setHighlight.

//TODO:详细描述如何覆盖setSelected(请继续关注)

Ios相关问答推荐

Swift addtarget方法的默认参数不生效

TrueDepth摄像机像素距离不准确

UITableViewCell编程约束问题

快速 keys 串更新只有在第二次try 时才起作用

圆角矩形路径上的蛇形动画

在自定义 ButtonStyle 中修改形状 colored颜色

错误地提取问题的答案选项

具有一个参数/参数的泛型类的泛型类

xcode-select:找不到clang

Xcode14 启动时崩溃:dyld:库未加载:/usr/lib/swift/libswiftCoreGraphics.dylib

SwiftUI - ScrollView 不显示底部文本

swiftUI中的剪辑形状无法使用旋转效果

AVPlayer 退出全屏

在向我的 struct 添加属性后获取线程 10:EXC_BAD_ACCESS (code=EXC_I386_GPFLT)

如何告诉 SwiftUI 视图绑定到嵌套的 ObservableObjects

如何以编程方式调用视图控制器?

是否可以在没有 Mac 的情况下为 iOS 制作 PhoneGap 应用程序?

iOS:如何从 URL 调试新启动应用程序

从 Swift 转换为 Objective-c 的工具

两个数字之间的动画UILabel文本?