iOS控件之UISearchBar

创建

UISearchBar * searchBar = [[UISearchBar alloc] init];
UISearchBar * searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(20, 50, 200, 30)];

样式

  • 风格
searchBar.barStyle = UIBarStyleBlack;
typedef NS_ENUM(NSInteger, UIBarStyle) {
    UIBarStyleDefault          = 0,   // 默认样式
    UIBarStyleBlack            = 1,   // 黑色背景样式
    
    UIBarStyleBlackOpaque      = 1,   // 被弃用,使用UIBarStyleBlack
    UIBarStyleBlackTranslucent = 2,   // 被弃用,使用UIBarStyleBlack 并设置translucent属性为YES
} __TVOS_PROHIBITED;
UIBarStyleDefault

UIBarStyleBlack
  • 样式
    该属性可以与barStyle属性共同使用
searchBar.searchBarStyle = UISearchBarStyleMinimal;
typedef NS_ENUM(NSUInteger, UISearchBarStyle) {
    UISearchBarStyleDefault,    // 当前UISearchBarStyleProminent样式
    UISearchBarStyleProminent,  // 用于我的邮件、消息和联系人
    UISearchBarStyleMinimal     // 用于我的日历、笔记和音乐
} NS_ENUM_AVAILABLE_IOS(7_0);

UISearchBarStyleMinimal不提供默认背景颜色或样式,我们可以定制,自定义背景和搜索框图片优先级高于该属性

UISearchBarStyleProminent

UISearchBarStyleMinimal

  • 搜索栏上关键元素的色调
searchBar.tintColor = [UIColor redColor];
  • 搜索栏整体的色调
searchBar.barTintColor = [UIColor yellowColor]; 
// 会改变cancel按钮的title颜色
  • 半透明
searchBar.translucent = NO; // 默认为YES
  • 背景图
searchBar.backgroundImage = [UIImage imageNamed:@"bg.png"];
// 使用UIBarMetrics、DefaultPrompt设置一个背景图
-(void)setBackgroundImage:(nullable UIImage *)backgroundImage forBarPosition:(UIBarPosition)barPosition barMetrics:(UIBarMetrics)barMetrics NS_AVAILABLE_IOS(7_0) UI_APPEARANCE_SELECTOR;  
// 获取给定UIBarMetrics、DefaultPrompt的背景图
-(nullable UIImage *)backgroundImageForBarPosition:(UIBarPosition)barPosition barMetrics:(UIBarMetrics)barMetrics NS_AVAILABLE_IOS(7_0) UI_APPEARANCE_SELECTOR;
  • 输入框背景图
// 设置搜索框区域的背景图
-(void)setSearchFieldBackgroundImage:(nullable UIImage *)backgroundImage forState:(UIControlState)state NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR;
// 获取某状态下搜索框区域的背景图
-(nullable UIImage *)searchFieldBackgroundImageForState:(UIControlState)state NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR;
  • 设置各按钮图标
// 给搜索框中的查找、清除、数钱、结果列表按钮设置图标
-(void)setImage:(nullable UIImage *)iconImage forSearchBarIcon:(UISearchBarIcon)icon state:(UIControlState)state NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR;
// 获取某个按钮某个状态下的图标
-(nullable UIImage *)imageForSearchBarIcon:(UISearchBarIcon)icon state:(UIControlState)state NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR;

其他属性

  • 当前内容
searchBar.text;
  • 占位符
searchBar.placeholder = @"请输入搜索内容...";
  • 显示在搜索栏上方的一行文字
searchBar.prompt = @"你好";
  • 是否显示书签图标
searchBar.showsBookmarkButton = YES; // 默认为NO
  • 是否显示取消按钮
searchBar.showsCancelButton = YES; // 默认为NO

或者,可以使用下面的方法进行设置显示与隐藏,并且可以设置是否带有显示隐藏动画

-(void)setShowsCancelButton:(BOOL)showsCancelButton animated:(BOOL)animated NS_AVAILABLE_IOS(3_0) __TVOS_PROHIBITED;
  • 是否显示搜索结果按钮
searchBar.showsSearchResultsButton = YES; // 默认为NO
// 当该属性被设置为YES时,showsBookmarkButton属性设置失效

还可以控制搜索结果按钮的选中状态

searchBar.searchResultsButtonSelected = YES;  //默认为NO
  • 键盘的输入配置(只读)
searchBar.inputAssistantItem;
  • 输入键盘附加视图
UIView * view = [[UIView alloc] initWithFrame:CGRectMake(100, 50, 100, 50)];
view.backgroundColor = [UIColor redColor];
// 在键盘上附加一个视图,一般用于添加一个收回键盘的按钮
searchBar.inputAccessoryView = view;

偏移量

  • 文字相对于输入框背景的偏移量
searchBar.searchTextPositionAdjustment = UIOffsetMake(10, 10);
  • 输入框背景相对于整个searchBar的偏移量
searchBar.searchFieldBackgroundPositionAdjustment = UIOffsetMake(10, 10);
  • 按钮图标相对于输入框背景的偏移量
// 设置按钮图标相对于输入框背景的偏移量
-(void)setPositionAdjustment:(UIOffset)adjustment forSearchBarIcon:(UISearchBarIcon)icon NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR;
// 获取按钮图标相对于输入框背景的偏移量
-(UIOffset)positionAdjustmentForSearchBarIcon:(UISearchBarIcon)icon NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR;
[searchBar setPositionAdjustment:UIOffsetMake(10, 10) forSearchBarIcon:UISearchBarIconSearch];

扩展栏

  • 显示扩展栏
searchBar.showsScopeBar = YES; // 默认NO
  • 扩展栏标题
searchBar.scopeButtonTitles = @[@"组一",@"组二",@"组三"];
  • 当前选中的扩展栏模块序号
searchBar.selectedScopeButtonIndex = 1;
  • 背景图
searchBar.scopeBarBackgroundImage = [UIImage imageNamed:@"scopeBg.png"];
  • 按钮背景图
// 设置扩展栏按钮背景图
-(void)setScopeBarButtonBackgroundImage:(nullable UIImage *)backgroundImage forState:(UIControlState)state NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR; 
// 获取扩展栏按钮背景图
-(nullable UIImage *)scopeBarButtonBackgroundImageForState:(UIControlState)state NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR;
  • 设置按钮标题富文本样式
-(void)setScopeBarButtonTitleTextAttributes:(nullable NSDictionary<NSString *, id> *)attributes forState:(UIControlState)state NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR;
-(nullable NSDictionary<NSString *, id> *)scopeBarButtonTitleTextAttributesForState:(UIControlState)state NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR;
  • 设置按钮间分割线图片
// 需要设置:左选中右正常、左正常右选中、左正常右正常等状态时分割线的图片
-(void)setScopeBarButtonDividerImage:(nullable UIImage *)dividerImage forLeftSegmentState:(UIControlState)leftState rightSegmentState:(UIControlState)rightState NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR;
-(nullable UIImage *)scopeBarButtonDividerImageForLeftSegmentState:(UIControlState)leftState rightSegmentState:(UIControlState)rightState NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR;

代理

@property(nullable,nonatomic,weak) id<UISearchBarDelegate> delegate; 
// 通过返回值设置searchBar是否是第一响应者
- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar;
// 当searchBar输入框中的文字开始编辑时调用
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar;
// 通过返回值设置searchBar是否结束编辑
- (BOOL)searchBarShouldEndEditing:(UISearchBar *)searchBar;
// 当searchBar结束编辑时调用
- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar; 
// 当searchBar输入框中的文字发生变化时调用(包括清除操作)
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText;
// 当searchBar输入框中文字在发生变化之前调用
- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text NS_AVAILABLE_IOS(3_0);

// 当点击键盘中的搜索按钮时调用
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar; 
// 当点击searchBar中的书签按钮时调用
- (void)searchBarBookmarkButtonClicked:(UISearchBar *)searchBar __TVOS_PROHIBITED;
// 当点击searchBar中的取消按钮时调用
- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar __TVOS_PROHIBITED;
// 当点击searchBar中的搜索结果按钮时调用
- (void)searchBarResultsListButtonClicked:(UISearchBar *)searchBar NS_AVAILABLE_IOS(3_2) __TVOS_PROHIBITED;

// 当点击searchBar扩展栏中的按钮时调用
- (void)searchBar:(UISearchBar *)searchBar selectedScopeButtonIndexDidChange:(NSInteger)selectedScope NS_AVAILABLE_IOS(3_0);

版权声明:出自MajorLMJ技术博客的原创作品 ,转载时必须注明出处及相应链接!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容