首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何访问SearchBar引用中的图像视图和标签等视图?

如何访问SearchBar引用中的图像视图和标签等视图?
EN

Stack Overflow用户
提问于 2017-04-12 09:40:45
回答 2查看 541关注 0票数 1

我正试图使用声明如下所示的SearchBar引用自定义SearchBar

代码语言:javascript
运行
复制
@property (weak, nonatomic) IBOutlet UISearchBar *searchRef;

然后,我尝试访问UIImage引用和UISearchBarTextFieldLabel,如图所示

我正在使用以下代码打印子视图的引用

代码语言:javascript
运行
复制
NSLog(@"%@",self.searchRef.subviews[0].subviews[1].subviews);

但没有得到预期的结果。我想要UIImage裁判和UISearchBarTextFieldLabel。我怎么能这么做?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-12 09:53:28

如果有对文本字段的引用,则可以将其转换为UITextField,然后访问其leftViewrightView属性。通常,leftView是放大镜UIImageView

代码语言:javascript
运行
复制
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将来可能会决定更改视图层次结构,这可能会导致您的代码完全失败或崩溃。

如果必须这样做,则递归搜索每个视图的子视图将更安全,直到找到所要查找的内容为止,而不是硬编码数组索引。

票数 1
EN

Stack Overflow用户

发布于 2017-04-12 09:52:50

您可以像这样从搜索栏到达imageView,而不是到达uiimage。

目标-C

代码语言:javascript
运行
复制
UITextField *textFieldInsideSearchBar = [self.searhBar valueForKey:@"searchField"];
UIImageView *imageView = (UIImageView *) textFieldInsideSearchBar.leftView;

Swift 3Swift 4

代码语言:javascript
运行
复制
let textFieldInsideSearchBar = searchBar.value(forKey: "searchField") as? UITextField
let imageView = textFieldInsideSearchBar?.leftView as! UIImageView
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43365885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档