A.导航栏搜索框
1.需求
- 在“发现”页面,在顶部导航栏NavigationBar上添加一个搜索框
- 左端带有“放大镜”图标
2.思路
- 使用UISearchBar: 简单易用,但是样式死板不能定制(此处UISearchBar的背景色容易和导航栏的背景色混淆),而且在iOS6和iOS7上会产生不同的样式。
- 使用UITextField创建:继承或者扩展UITextField,设置背景图和左端图标
==>由于是一个自定义的“新”控件,这里我们使用继承UITextField来实现
3.实现
- 创建一个继承UITextField的类,这里命名为HVWSearchBar
- 重写initWithFrame方法,用来初始化搜索框的图标、背景图片、图标和文字的对称方式、清除按钮的显示
- 在需要的控制器上实例化HVWSearchBar,赋予其位置尺寸信息,添加到NavigationItem的titleView上
1 // 2 // HVWSearchBar.m 3 // HVWWeibo 4 // 5 // Created by hellovoidworld on 15/2/2. 6 // Copyright (c) 2015年 hellovoidworld. All rights reserved. 7 // 8 9 #import "HVWSearchBar.h" 10 11 @implementation HVWSearchBar 12 13 /** 使用代码创建控件的时候,调用init的时候会调用此方法 */ 14 - (instancetype)initWithFrame:(CGRect)frame { 15 // 由于是重写方法,记得一定要先调用父类初始化方法 16 if (self = [super initWithFrame:frame]) { 17 // 设置内容垂直居中 18 [self setContentVerticalAlignment:UIControlContentVerticalAlignmentCenter]; 19 20 // 设置背景图片(拉伸图片) 21 self.background = [UIImage resizedImage:@"searchbar_textfield_background"]; 22 23 // 添加图标“放大镜“ 24 UIImageView *searchBarIconView = [[UIImageView alloc] init]; 25 searchBarIconView.image = [UIImage imageNamed:@"searchbar_textfield_search_icon"]; 26 27 // 调整”放大镜”两边间距,view显示为正方形 28 searchBarIconView.width = searchBarIconView.image.size.width + 10; 29 searchBarIconView.height = searchBarIconView.width; 30 31 // 设置”放大镜“在imageView中居中 32 [searchBarIconView setContentMode:UIViewContentModeCenter]; 33 34 // 设置textField的左部控件(”放大镜“所属的imageView)显示 35 [self setLeftViewMode:UITextFieldViewModeAlways]; 36 37 // 设置图标到搜索栏 38 self.leftView = searchBarIconView; 39 40 // 显示清除按钮 41 [self setClearButtonMode:UITextFieldViewModeAlways]; 42 } 43 44 return self; 45 } 46 47 @end
实例化一个HVWSearchBar:
1 - (void)viewDidLoad { 2 [super viewDidLoad]; 3 4 // 添加搜索框 5 HVWSearchBar *searchBar = [[HVWSearchBar alloc] init]; 6 searchBar.frame = CGRectMake(0, 0, 300, 40); 7 self.navigationItem.titleView = searchBar; 8 }