iOS组件之UISearchBar详解
引言 UISearchBar类实现一个文本字段控制基于文本的搜索,它是继承于UIView(有关UIView的介绍请到《iOS组件之UIView详解》)。控制输入文字,一个搜索按钮,书签按钮和取消按钮提供了一个文本字段。该对象的UISearchBar实际上并不执行任何搜查。您可以使用委托符合UISearchBarDelegate协议对象,实现这些输入文字和点击按钮的事件。
目录
1、基本属性和方法
2、iOS5新增
3、iOS7新增
4、UISearchBarDelegate协议(可选)
1、基本属性和方法
// 设置控件样式(默认UIBarStyleDefault)
UIBarStyle barStyle;
// 设置代理
id<UISearchBarDelegate> delegate;
// 控件上面显示的文字
NSString *text;
// 显示在顶部的单行文字,通常作为一个提示行
NSString *prompt;
// 半透明的提示文字,输入搜索内容会消失
NSString *placeholder;
// 是否在控件的右端显示一个书的按钮(没有文字的时候)
BOOL showsBookmarkButton;
// 是否显示cancel按钮
BOOL showsCancelButton;
- (void)setShowsCancelButton:(BOOL)showsCancelButton animated:(BOOL)animated;
// 是否在控件的右端显示搜索结果按钮(没有文字的时候)
BOOL showsSearchResultsButton;
// 搜索结果按钮是否被选中
BOOL searchResultsButtonSelected;
// bar的颜色(具有渐变效果)
UIColor *tintColor;
UIColor *barTintColor(iOS7.0);
UISearchBarStyle searchBarStyle (iOS7.0);
// 指定控件是否会有透明效果
BOOL translucent;
// 设置在什么情况下自动大写(默认UITextAutocapitalizationTypeNone)
UITextAutocapitalizationType autocapitalizationType;
// 对于文本对象自动校正风格 (默认UITextAutocorrectionTypeDefault)
UITextAutocorrectionType autocorrectionType;
// (默认UITextSpellCheckingTypeDefault)
UITextSpellCheckingType spellCheckingType;
// 键盘样式 (默认UIKeyboardTypeDefault)
UIKeyboardType keyboardType;
// 搜索栏下部的选择栏,数组里面的内容是按钮的标题
NSArray *scopeButtonTitles;
// 搜索栏下部的选择栏按钮的个数
NSInteger selectedScopeButtonIndex;
// 控制搜索栏下部的选择栏是否显示出来
BOOL showsScopeBar;
// 提供一个遮盖视图
UIView *inputAccessoryView;
2、iOS5新增
// 设置背景图片
UIImage *backgroundImage;
// 设置scope的背景颜色
UIImage *scopeBarBackgroundImage;
- (void)setSearchFieldBackgroundImage:(UIImage *)backgroundImage forState:(UIControlState)state;
- (UIImage *)searchFieldBackgroundImageForState:(UIControlState)state;
// 设置某个状态下search的ico图片
- (void)setImage:(UIImage *)iconImage forSearchBarIcon:(UISearchBarIcon)icon state:(UIControlState)state;
// 获取某个状态下的ico图片
- (UIImage *)imageForSearchBarIcon:(UISearchBarIcon)icon state:(UIControlState)state;
// 设置某个状态下scopeBarButton的背景图片
- (void)setScopeBarButtonBackgroundImage:(UIImage *)backgroundImage forState:(UIControlState)state;
// 获取某个状态下scopeBarButton的背景图片
- (UIImage *)scopeBarButtonBackgroundImageForState:(UIControlState)state;
//
- (void)setScopeBarButtonDividerImage:(UIImage *)dividerImage forLeftSegmentState:(UIControlState)leftState rightSegmentState:(UIControlState)rightState;
- (UIImage *)scopeBarButtonDividerImageForLeftSegmentState:(UIControlState)leftState rightSegmentState:(UIControlState)rightState;
//
- (void)setScopeBarButtonTitleTextAttributes:(NSDictionary *)attributes forState:(UIControlState)state;
- (NSDictionary *)scopeBarButtonTitleTextAttributesForState:(UIControlState)state;
//
UIOffset searchFieldBackgroundPositionAdjustment;
//
UIOffset searchTextPositionAdjustment;
//
- (void)setPositionAdjustment:(UIOffset)adjustment forSearchBarIcon:(UISearchBarIcon)icon;
- (UIOffset)positionAdjustmentForSearchBarIcon:(UISearchBarIcon)icon;
3、iOS7新增
//
- (void)setBackgroundImage:(UIImage *)backgroundImage forBarPosition:(UIBarPosition)barPosition barMetrics:(UIBarMetrics)barMetrics;
//
- (UIImage *)backgroundImageForBarPosition:(UIBarPosition)barPosition barMetrics:(UIBarMetrics)barMetrics;
4、UISearchBarDelegate协议(可选)
// 是否允许编辑,如果返回为NO则不能成为第一响应者
- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar;
// 开始编辑
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar;
// 是否允许结束编辑
- (BOOL)searchBarShouldEndEditing:(UISearchBar *)searchBar;
// 结束编辑
- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar;
// 文本内容改变时调用
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText;
// 如果允许继续输入,那么返回YES,否则返回NO。(可以对字数进行限制)
- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text;
// 当搜索按钮被点击的时候
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar;
//
- (void)searchBarBookmarkButtonClicked:(UISearchBar *)searchBar;
// cancel按钮点击时调用
- (void)searchBarCancelButtonClicked:(UISearchBar *) searchBar;
// ResultsList按钮被点击时调用
- (void)searchBarResultsListButtonClicked:(UISearchBar *)searchBar;
// 还有一个很重要的事情,设了按钮就要给他们安排功能。所以说,我们要实现这个代理UISearchBarDelegate里的这个方法searchBar:selectedScopeButtonIndexDidChange:告诉表格,你选择的范围是啥。
- (void)searchBar:(UISearchBar *)searchBar selectedScopeButtonIndexDidChange:(NSInteger)selectedScope;