我想遍历 View 及其 subview 以突出显示它们。首先,我使用这样的选择器:
func highlightViewAndSubviews(view: UIView, highlighted: Bool) {
if view.respondsToSelector(Selector("setHighlighted:")) {
view.performSelector(Selector("setHighlighted:"), withObject: highlighted)
}
for subview in view.subviews {
highlightViewAndSubviews(subview, highlighted: highlighted)
}
}
但当 highlighted 为 false 或 view 为 UILabel
时,它不起作用。然后我使用类型转换来实现这一点。它工作得很好。
func highlightViewAndSubviews(view: UIView, highlighted: Bool) {
if let imageView = view as? UIImageView {
imageView.highlighted = highlighted
}
if let label = view as? UILabel {
label.highlighted = highlighted
}
for subview in view.subviews {
highlightViewAndSubviews(subview, highlighted: highlighted)
}
}
我的问题是为什么。我更喜欢选择器,因为它适用于标签、按钮、 ImageView 等。非常感谢。
最佳答案
问题是这条线没有按照你的想法行事:
view.performSelector(Selector("setHighlighted:"), withObject: highlighted)
改为使用键值编码:
view.setValue(highlighted, forKey:"highlighted")
关于ios - 为什么类型转换有效而选择器不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38428614/