2017-04-12 8 views
0

その後SearchBar Referenceのimageviewやlabelなどのビューにアクセスする方法は?

@property (weak, nonatomic) IBOutlet UISearchBar *searchRef; 

怒鳴る宣言として、私は検索バーの参照を使用して検索バーをカスタマイズしようとしています絵に

This is the picture

を示したように、私は私はUIImage参考とUISearchBarTextFieldLabelにアクセスしようとしています次のコードを使用してサブビューの参照を印刷する

NSLog(@"%@",self.searchRef.subviews[0].subviews[1].subviews); 

しかし、期待どおりの結果が得られません。 UISearchBarTextFieldLabelと同様、UIImage refも必要です。どうやってやるの?

+0

完全にカスタマイズすることもできます。https://iosdevcenters.blogspot.com/2016/07/hacking-uisearchbar-in-swift.html –

答えて

0

テキストフィールドの場合はUITextFieldとしてキャストし、leftViewrightViewのプロパティにアクセスできます。通常、leftViewは虫眼鏡UIImageViewです。サイドノートとして

UITextField *textField = (UITextField *)self.searchRef.subviews[0].subviews[1]; 

// Change the search image. 
if ([textField.leftView isKindOfClass:[UIImageView class]]) { 

    UIImageView *searchImageView = (UIImageView *)textField.leftView; 

    // Do something with the image view here... 
} 

UISearchBar'sビューは、常にこのようにレイアウトされることを前提とすることを推奨していません。たとえば、Appleは将来、ビューの階層を変更することを決定する可能性があり、コードが失敗または完全にクラッシュする可能性があります。

の場合はにする必要があります。アレイインデックスをハードコードするのではなく、探しているものが見つかるまで、再帰的に各ビューのサブビューを検索する方が安全です。

+0

どういう答えでしょう。素晴らしい! –

0

あなたがuiimageに達することができるよりも、あなたはObjective-Cのこのような検索バーから

をImageViewのを達することができる

UITextField *textFieldInsideSearchBar = [self.searhBar valueForKey:@"searchField"]; 
UIImageView *imageView = (UIImageView *) textFieldInsideSearchBar.leftView; 

スウィフト3スウィフト4

let textFieldInsideSearchBar = searchBar.value(forKey: "searchField") as? UITextField 
let imageView = textFieldInsideSearchBar?.leftView as! UIImageView 
+0

回答もありがとうございます。 –

関連する問題