更改UISearchBar搜索字段背景

Dav*_*ave 13 objective-c uisearchbar ios

我有一个UISearchBar包含在a中,UIViewUIView已被分配给UITableView's tableHeaderView.我试图设计样式UISearchBar如下:

我想要的是

走出大门,这就是它的样子:

它现在看起来如何

关于如何设计风格UISearchBar,搜索领域等等,有很多SO问题和答案,其中一些特别关注背景.其中许多涉及遍历UISearchBar's subviews,查找UISearchBarBackground(或_UISearchBarSearchFieldBackgroundView)对象,并直接设置其背景颜色.我正在尝试找到支持的API来执行此操作,但是......

setSearchFieldBackgroundImage:forState:方法似乎有很大的潜力,但这是我使用1px白色(或透明)图像时得到的UIControlStateNormal:

为setSearchFieldBackgroundImage:forState使用透明图像:

有关如何使其工作的任何想法?我很感激有人指着我回答这个问题的SO帖子,但我确实认为我已经把它们都读了.万分感谢.

jon*_*wah 7

您可以使用appearanceWhenContainedIn来定位元素,而无需遍历视图层次结构.就像是:

[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setBackgroundColor:[UIColor whiteColor]];
[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setTextColor:[UIColor lightGrayColor]];
Run Code Online (Sandbox Code Playgroud)

更新:

由于appearanceWhenContainedIn现在已过时,使用

[[UITextField appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar self]]] <your setter here>];
Run Code Online (Sandbox Code Playgroud)


IKK*_*KKA 3

请尝试以下代码

\n\n
[[UISearchBar appearance]setBackgroundImage:[UIImage imageNamed:@\xe2\x80\x9csearchbar_bg.png"]];\nfor (UIView *searchbuttons in searchBar.subviews) {\n\n    if ([searchbuttons isKindOfClass:[UIButton class]]) {\n\n        UIButton *cancelbutton = (UIButton *)searchbuttons;\n        [cancelbutton setBackgroundImage:[UIImage imageNamed:@\xe2\x80\x9ccanelBtn.png"] forState:UIControlStateNormal];\n    }\n}\n\n\n UITextField *searchField = [searchBar valueForKey:@"_searchField"];\n searchField.background = [UIImage imageNamed:@"bg.png"];\n
Run Code Online (Sandbox Code Playgroud)\n