LoginSignup
0
1

More than 5 years have passed since last update.

【iOS】UIKit Frameworkのクラスのsubviewを調べて取得する方法

Last updated at Posted at 2017-08-20

例)UISearchBar

subviewから取得する

UISearchBarのsubviewはUIViewですが、そのsubviewにはImageViewとTextFieldのクラスがあります。

for subview in searchBar.subviews {
    for subview2 in subview.subviews {
        print(subview2)
    }    
}

[コンソールの出力]
SearchBarSubview.png

クラス名は、
UISearchBarBackground -> ImageView
UISearchBarTextField -> TextField

となります。

UISearchBarTextField等は、通常時に利用できるクラスではないので、

if subview2.isKind(of: UITextField.self) {

}

のように取得はできません。

そのためNSClassFromStringを利用して、取得します。
以下の2種類の方法はどちらでも取得できます。

for subview in searchBar.subviews {
    for subview2 in subview.subviews {
        print(subview2)
        if subview2.isKind(of: NSClassFromString("UISearchBarBackground")!) {

        }
    }    
}
for subview in searchBar.subviews {
    for subview2 in subview.subviews {
        print(subview2)
        if NSStringFromClass(type(of: subview2)) == "UISearchBarBackground" {

        }
    }    
}

あとは、キャストして利用するだけです。

if subview2.isKind(of: NSClassFromString("UISearchBarTextField")!) {
    let textField = subview2 as! UITextField
    textField.backgroundColor = UIColor.blue
}

value(forKey: )を利用して取得する

同様にpropertyで設定されていればvalue(forKey: )を利用して取得することもできます。

let textField = searchBar.value(forKey: "_searchField") as! UITextField

textField.backgroundColor = UIColor.blue

どちらの方法でも特に問題ありません。

0
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1