一、簡(jiǎn)介
<<繼承關(guān)系:UISearchBar-->UIView-->UIResponder-->NSObject
格式為
1-->搜索框風(fēng)格(作用)
typedef NS_ENUM(NSUInteger, UISearchBarStyle) {
UISearchBarStyleDefault, // currently UISearchBarStyleProminent
UISearchBarStyleProminent, // used my Mail, Messages and Contacts
UISearchBarStyleMinimal // used by Calendar, Notes and Music
} NS_ENUM_AVAILABLE_IOS(7_0);
searchbar.barStyle = UIBarStyleBlack; (這是具體的例子)
@property(nonatomic) UIBarStyle barStyle;// 搜索框風(fēng)格 (這是說(shuō)明)
二、UISearchBar的初始化方法(屬性的順序與蘋果API一致)
1-->三種初始化方法(三個(gè)初始化方法是我們常見(jiàn)的初始化 UIView 以及它的子類的方法,比較常見(jiàn))
-(instancetype)init
-(instancetype)initWithFrame:(CGRect)frame
-(nullable instancetype)initWithCoder:(NSCoder *)aDecoder
三、UISearchBar的初始化方法
1、設(shè)置搜索框風(fēng)格
typedef NS_ENUM(NSInteger, UIBarStyle) {
UIBarStyleDefault //白色搜索框,灰色背景
UIBarStyleBlack //黑色搜索框,
UIBarStyleBlackOpaque = 1, // 禁用. Use UIBarStyleBlack
UIBarStyleBlackTranslucent = 2, // 禁用. Use UIBarStyleBlack and set the translucent property to YES
}
searchbar.barStyle = UIBarStyleBlack;
@property(nonatomic) UIBarStyle barStyle;// 搜索框風(fēng)格
2-->設(shè)置代理
searchbar.delegate = self;
@property(nullable,nonatomic,weak) id<UISearchBarDelegate> delegate;
3-->設(shè)置搜索的文本
searchBar.text = @"ask";
@property(nullable,nonatomic,copy) NSString *text; // 獲取搜索輸入內(nèi)容
4-->頂部提示文本
searchbar.prompt = @"iOS Dev";
@property(nullable,nonatomic,copy) NSString *prompt; //默認(rèn)是空
5-->設(shè)置占位符
searchbar.placeholder = @"請(qǐng)輸入搜索關(guān)鍵字";
@property(nullable,nonatomic,copy) NSString *placeholder; // 默認(rèn)是空
6-->是否顯示書簽按鈕,默認(rèn)隱藏
searchbar.showsBookmarkButton = YES;
@property(nonatomic) BOOL showsBookmarkButton __TVOS_PROHIBITED; // 默認(rèn)是 NO
注意:書簽按鈕屬性與搜索回車按鈕屬性不能同時(shí)進(jìn)行設(shè)置,只能二選一,否則會(huì)出現(xiàn)沖突)
7-->是否顯示退出按鈕
searchbar.showsCancelButton = YES;
@property(nonatomic) BOOL showsCancelButton __TVOS_PROHIBITED; 是否顯示退出按鈕,默認(rèn)隱藏(注意:通常退出按鈕的顯示是在代理方法中設(shè)置其顯示或隱藏,而不是在初始化時(shí)就設(shè)置基顯示)
8-->是否顯示搜索回車按鈕
searchbar.showsSearchResultsButton = YES;
@property(nonatomic) BOOL showsSearchResultsButton NS_AVAILABLE_IOS(3_2) __TVOS_PROHIBITED; //是否顯示搜索回車按鈕,默認(rèn)隱藏(注意:書簽按鈕屬性與搜索回車按鈕屬性不能同時(shí)進(jìn)行設(shè)置,只能二選一,否則會(huì)出現(xiàn)沖突)
9-->搜索結(jié)果按鈕為選中狀態(tài)
searchbar. searchResultsButtonSelected = YES;
@property(nonatomic, getter=isSearchResultsButtonSelected) BOOL searchResultsButtonSelected NS_AVAILABLE_IOS(3_2) __TVOS_PROHIBITED; // 默認(rèn)是no , 設(shè)置搜索結(jié)果按鈕的選中狀態(tài)
10-->設(shè)置顯示取消按鈕
[searchBar setShowsCancelButton:YES animated:YES];
- (void)setShowsCancelButton:(BOOL)showsCancelButton animated:(BOOL)animated NS_AVAILABLE_IOS(3_0) __TVOS_PROHIBITED;
11-->輸入助手配置鍵盤的快捷方式欄時(shí)使用
UITextInputAssistantItem* item = [searchBar inputAssistantItem];
@property (nonatomic, readonly, strong) UITextInputAssistantItem *inputAssistantItem NS_AVAILABLE_IOS(9_0) __TVOS_PROHIBITED __WATCHOS_PROHIBITED;
12-->設(shè)置這個(gè)顏色值會(huì)影響搜索框中的光標(biāo)的顏色
searchbar.tintColor = [UIColor redColor]; // 輸入光標(biāo)顏色
@property(nonatomic,retain) UIColor *tintColor;
13-->設(shè)置輸入框邊框顏色
searchbar.barTintColor = [UIColor brownColor];
@property(nullable, nonatomic,strong) UIColor *barTintColor NS_AVAILABLE_IOS(7_0) UI_APPEARANCE_SELECTOR;
14-->設(shè)置輸入框類型
typedef NS_ENUM(NSUInteger, UISearchBarStyle) {
UISearchBarStyleDefault, // currently UISearchBarStyleProminent
UISearchBarStyleProminent, // 顯示背景
UISearchBarStyleMinimal // 不顯示背景
} NS_ENUM_AVAILABLE_IOS(7_0);
searchbar.searchBarStyle = UISearchBarStyleProminent;
@property (nonatomic) UISearchBarStyle searchBarStyle NS_AVAILABLE_IOS(7_0);
15-->設(shè)置是否半透明
searchBar. translucent = YES;
@property(nonatomic,assign,getter=isTranslucent) BOOL translucent NS_AVAILABLE_IOS(3_0); // Default is NO on iOS 6 and earlier. Always YES if barStyle is set to UIBarStyleBlackTranslucent
16-->搜索欄下部的選擇欄,數(shù)組里面的內(nèi)容是按鈕的標(biāo)題
searchBar.scopeButtonTitles = [NSArray arrayWithObjects:@"BOY",@"GIRL",@"ALL",nil];
@property(nullable, nonatomic,copy) NSArray<NSString *> *scopeButtonTitles NS_AVAILABLE_IOS(3_0);
17-->搜索欄下部的選擇欄按鈕的個(gè)數(shù)
searchBar.selectedScopeButtonIndex = 0;//默認(rèn)選中第1個(gè)啦
@property(nonatomic) NSInteger selectedScopeButtonIndex NS_AVAILABLE_IOS(3_0);
18-->控制搜索欄下部的選擇欄是否顯示出來(lái)
searchBar.showsScopeBar = YES;
@property(nonatomic) BOOL showsScopeBar NS_AVAILABLE_IOS(3_0); // 默認(rèn)是NO的。如果YES,則顯示范圍欄
19--> 輸入框成為第一響應(yīng)顯示自定義附件輸入視圖
UILabel *label = [[UILabel alloc]init];
label.text = @"這是一個(gè)inputAccessoryView";
label.textAlignment = NSTextAlignmentCenter;
label.textColor = [UIColor blackColor];
label.frame = CGRectMake(0, 0, 0, 30);
label.backgroundColor = [UIColor redColor];
search.searchBar.inputAccessoryView = label;
@property (nullable, nonatomic, readwrite, strong) UIView *inputAccessoryView;
20-->搜索框的背景圖
UIImage *backgroundImage = [UIImage imageNamed:@"image001"];
self.backgroundImage = backgroundImage;
@property(nullable, nonatomic,strong) UIImage *backgroundImage NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR;
21-->搜索框附屬分欄條的背景
UIImage *scopeBarBackgroundImage = [UIImage imageNamed:@"image002"];
self.scopeBarBackgroundImage = scopeBarBackgroundImage;
@property(nullable, nonatomic,strong) UIImage *scopeBarBackgroundImage NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR;
22-->設(shè)置搜索框背景圖片
typedef NS_ENUM(NSInteger, UIBarPosition) {
UIBarPositionAny = 0,//不指定位置
UIBarPositionBottom = 1, // 位于視圖底部
UIBarPositionTop = 2, //位于視圖頂部
UIBarPositionTopAttached = 3, // 位于屏幕頂部同時(shí)也在其視圖的頂部
} NS_ENUM_AVAILABLE_IOS(7_0);
typedef NS_ENUM(NSInteger, UIBarMetrics) {
UIBarMetricsDefault,//設(shè)備默認(rèn)的外觀
UIBarMetricsCompact,//手機(jī)尺寸的外觀
UIBarMetricsDefaultPrompt = 101, //橫屏且設(shè)置了prompt屬性
UIBarMetricsCompactPrompt,//豎屏且設(shè)置了prompt屬性
UIBarMetricsLandscapePhone NS_ENUM_DEPRECATED_IOS(5_0, 8_0, "Use UIBarMetricsCompact instead") = UIBarMetricsCompact,
UIBarMetricsLandscapePhonePrompt NS_ENUM_DEPRECATED_IOS(7_0, 8_0, "Use UIBarMetricsCompactPrompt") = UIBarMetricsCompactPrompt,
};
[self setBackgroundImage:[UIImage imageNamed:@"image001"] forBarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault];
-(void)setBackgroundImage:(nullable UIImage *)backgroundImage forBarPosition:(UIBarPosition)barPosition barMetrics:(UIBarMetrics)barMetrics NS_AVAILABLE_IOS(7_0) UI_APPEARANCE_SELECTOR;
23-->獲取搜索框背景圖片
UIImage *image=[searchBar backgroundImageForBarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault];
-(nullable UIImage *)backgroundImageForBarPosition:(UIBarPosition)barPosition barMetrics:(UIBarMetrics)barMetrics NS_AVAILABLE_IOS(7_0) UI_APPEARANCE_SELECTOR;
24、設(shè)置搜索框文本框的背景圖片
[self setSearchFieldBackgroundImage:[UIImage imageNamed:@"image003"] forState:UIControlStateNormal];
-(void)setSearchFieldBackgroundImage:(nullable UIImage *)backgroundImage forState:(UIControlState)state NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR;
25、 獲取搜索框文本框的背景圖片
UIImage *image=[searchBar searchFieldBackgroundImageForState:UIControlStateNormal];
-(nullable UIImage *)searchFieldBackgroundImageForState:(UIControlState)state NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR;
26、設(shè)置搜索框的圖標(biāo)
[self setImage:searchIcon forSearchBarIcon:UISearchBarIconSearch state:UIControlStateNormal];
-(void)setImage:(nullable UIImage *)iconImage forSearchBarIcon:(UISearchBarIcon)icon state:(UIControlState)state NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR;
27、獲取搜索框的圖標(biāo)
UIImage *image=[searchBar imageForSearchBarIcon: UISearchBarIconSearch state: UIControlStateNormal];
-(nullable UIImage *)imageForSearchBarIcon:(UISearchBarIcon)icon state:(UIControlState)state NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR;
28、設(shè)置選擇按鈕視圖的背景圖片
[self setScopeBarButtonBackgroundImage:[UIImage imageNamed:@"image002"] forState:UIControlStateNormal];
-(void)setScopeBarButtonBackgroundImage:(nullable UIImage *)backgroundImage forState:(UIControlState)state NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR;
29、獲取選擇按鈕視圖的背景圖片
UIImage *image=[searchBar scopeBarButtonBackgroundImageForState:UIControlStateNormal];
-(nullable UIImage *)scopeBarButtonBackgroundImageForState:(UIControlState)state NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR;
30、設(shè)置選擇按鈕視圖的分割線圖片
[self setScopeBarButtonDividerImage:[UIImage imageNamed:@"divider"] forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateNormal];
-(void)setScopeBarButtonDividerImage:(nullable UIImage *)dividerImage forLeftSegmentState:(UIControlState)leftState rightSegmentState:(UIControlState)rightState NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR;
31、獲取選擇按鈕視圖的分割線圖片
UIImage *image=[searchBar scopeBarButtonDividerImageForLeftSegmentState:UIControlStateNormal rightSegmentState: UIControlStateNormal];
-(nullable UIImage *)scopeBarButtonDividerImageForLeftSegmentState:(UIControlState)leftState rightSegmentState:(UIControlState)rightState NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR;
32、設(shè)置選擇按鈕視圖的標(biāo)題樣式
NSDictionary *attributeDic = @{NSFontAttributeName : [UIFont systemFontOfSize:20] , NSStrokeColorAttributeName : [UIColor orangeColor] , NSStrokeWidthAttributeName : @(3)};
[self setScopeBarButtonTitleTextAttributes:attributeDic forState:UIControlStateNormal];
-(void)setScopeBarButtonTitleTextAttributes:(nullable NSDictionary<NSString *, id> *)attributes forState:(UIControlState)state NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR;
32、獲取選擇按鈕視圖的標(biāo)題樣式
NSDictionary *dic=[searchBar scopeBarButtonTitleTextAttributesForState: UIControlStateNormal ];
- (nullable NSDictionary<NSString *, id> *)scopeBarButtonTitleTextAttributesForState:(UIControlState)state NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR;
33、 搜索框中文本框的背景偏移量
self.searchFieldBackgroundPositionAdjustment = UIOffsetMake(5, 3);
@property(nonatomic) UIOffset searchFieldBackgroundPositionAdjustment NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR;
34、搜索框中文本框的文本偏移量
self.searchTextPositionAdjustment = UIOffsetMake(10, 5);
@property(nonatomic) UIOffset searchTextPositionAdjustment NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR;
35、設(shè)置搜索框圖標(biāo)的偏移量
[self setPositionAdjustment:UIOffsetMake(15, 5) forSearchBarIcon:UISearchBarIconSearch];
-(void)setPositionAdjustment:(UIOffset)adjustment forSearchBarIcon:(UISearchBarIcon)icon NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR;
36、獲取搜索框圖標(biāo)的偏移量
UIOffset *offset=[searchBar positionAdjustmentForSearchBarIcon:UISearchBarIconSearch];
-(UIOffset)positionAdjustmentForSearchBarIcon:(UISearchBarIcon)icon NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR;
四、UISearchBar的UISearchBarDelegate屬性
1-->將要開(kāi)始編輯文本時(shí)會(huì)調(diào)用該方法,返回 NO 將不會(huì)變成第一響應(yīng)者
-(BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar {
return YES;
}
-(BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar;
2-->開(kāi)始輸入文本會(huì)調(diào)用該方法
-(void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar {
NSLog(@"開(kāi)始輸入搜索內(nèi)容");
[searchBar setShowsCancelButton:YES animated:YES]; // 動(dòng)畫顯示取消按鈕
}
-(void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar;
3-->將要結(jié)束編輯文本時(shí)會(huì)調(diào)用該方法,返回 NO 將不會(huì)釋放第一響應(yīng)者
-(BOOL)searchBarShouldEndEditing:(UISearchBar *)searchBar{
return YES;
}
-(BOOL)searchBarShouldEndEditing:(UISearchBar *)searchBar; // return NO to not resign first responder
4-->結(jié)束編輯文本時(shí)調(diào)用該方法
-(void)searchBarTextDidEndEditing:(UISearchBar *)searchBar {
searchBar.prompt = @"已經(jīng)結(jié)束編輯文本";
}
-(void)searchBarTextDidEndEditing:(UISearchBar *)searchBar;
5-->文本改變會(huì)調(diào)用該方法(包含clear文本)
-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText {
searchBar.prompt = @"2.在改變文本過(guò)程中。。。";
}
-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText;
6-->文字改變前會(huì)調(diào)用該方法,返回NO則不能加入新的編輯文字
-(BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
return YES;
}
-(BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text NS_AVAILABLE_IOS(3_0);
7-->鍵盤上的搜索按鈕點(diǎn)擊的會(huì)調(diào)用該方法
-(void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
searchBar.prompt = @"點(diǎn)擊鍵盤上的搜索按鈕";
}
-(void)searchBarSearchButtonClicked:(UISearchBar *)searchBar;
8-->搜索框右側(cè)圖書按鈕點(diǎn)擊會(huì)調(diào)用該方法
-(void) searchBarBookmarkButtonClicked:(UISearchBar *)searchBar {
searchBar.prompt = @"點(diǎn)擊圖書按鈕";
}
-(void)searchBarBookmarkButtonClicked:(UISearchBar *)searchBar __TVOS_PROHIBITED;
9-->點(diǎn)擊取消按鈕會(huì)調(diào)用該方法
-(void) searchBarCancelButtonClicked:(UISearchBar *)searchBar {
searchBar.prompt = @" 點(diǎn)擊取消按鈕";
}
-(void)searchBarCancelButtonClicked:(UISearchBar *)searchBar __TVOS_PROHIBITED;
10-->搜索結(jié)果列表按鈕被按下會(huì)調(diào)用該方法
-(void) searchBarResultsListButtonClicked:(UISearchBar *)searchBar {
searchBar.prompt = @" 點(diǎn)擊搜索結(jié)果列表按鈕";
}
-(void)searchBarResultsListButtonClicked:(UISearchBar *)searchBar __TVOS_PROHIBITED;
11-->搜索框的附屬按鈕視圖中切換按鈕會(huì)調(diào)用該方法
-(void)searchBar:(UISearchBar *)searchBar selectedScopeButtonIndexDidChange:(NSInteger)selectedScope {
NSLog(@"selectedScope = %ld",selectedScope);
}
-(void)searchBar:(UISearchBar *)searchBar selectedScopeButtonIndexDidChange:(NSInteger)selectedScope NS_AVAILABLE_IOS(3_0);