例)UISearchBar
subviewから取得する
UISearchBarのsubviewはUIViewですが、そのsubviewにはImageViewとTextFieldのクラスがあります。
for subview in searchBar.subviews {
for subview2 in subview.subviews {
print(subview2)
}
}
クラス名は、
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
どちらの方法でも特に問題ありません。