ios - 为什么类型转换有效而选择器不起作用

标签 ios swift highlight

我想遍历 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/

相关文章:

Elasticsearch 在聚合字段上突出显示问题

ios - ECSlidingViewController : Keep underLeftViewController open

ios - Diawi-只能从 Safari 进行

swift - dispatch_group_notify block 抛出的 "Realm accessed from incorrect thread"异常

ios - 带有多个图像的自定义 MKAnnotationView

jquery - 在 Datepicker JQuery UI (1.10.x) 和 JQuery (1.9.x) 中突出显示一整周

ios - 我如何在我的应用程序中通过播放器播放 UNNotificationSound.default()?

ios - 如何更改 UINavigationBar rightButton 图像?

ios - Jenkins 自动化 iOS 构建缺少 SwiftSupport 文件夹

jquery 在表中突出显示搜索文本