2016-07-18 15 views
1

ビューとそのサブビューをループしてハイライトしたいとします。セレクタが機能しないときに型キャストが動作する理由

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

問題は、このラインは、あなたが何を考えて行っていないということです。

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

使用キー値ではなく、コーディング:

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

ありがとう!この行が何をしているか説明してください。 – Lumialxk

関連する問題