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 }