我想循环浏览视图及其子视图以突出显示它们。首先,我使用这样的选择器:
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)
}
}
但是当突出显示为false或视图为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)
}
}
我的问题是为什么。我更喜欢选择器,因为它适用于标签,按钮,图像视图等。非常感谢提前。
答案 0 :(得分:0)
问题是这条线没有按照你的想法行事:
view.performSelector(Selector("setHighlighted:"), withObject: highlighted)
改为使用键值编码:
view.setValue(highlighted, forKey:"highlighted")