【问题标题】:Why type cast works while selector doesn't work为什么类型转换起作用而选择器不起作用
【发布时间】:2016-11-20 13:58:59
【问题描述】:

我想循环浏览视图及其子视图以突出显示它们。首先,我使用这样的选择器:

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)
    }
}

我的问题是为什么。我更喜欢选择器,因为它适用于标签、按钮、图像视图等。非常感谢。

【问题讨论】:

    标签: ios swift highlight


    【解决方案1】:

    问题是这条线并没有按照你的想法做:

    view.performSelector(Selector("setHighlighted:"), withObject: highlighted)
    

    改用键值编码:

    view.setValue(highlighted, forKey:"highlighted")
    

    【讨论】:

    • 谢谢!你能解释一下这条线是做什么的吗?
    猜你喜欢
    • 2018-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 2017-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多