本文结构:

1、首先是对UISearchBar的简介文字

2、初始化展现UISearchBar,并解析它的结构

3、属性、方法、代理等的一一介绍

4、日常的使用,包括单独对UISearchBar的配置、与其他控件的配合使用


一、UISearchBar的简介

  • UISearchBar : UIView <UIBarPositioning, UITextInputTraits>
  • 涉及到UITextField、UILabel、UIButton、UIColor
  • UISearchBarDelegate <UIBarPositioningDelegate>

二、初始化展示UISearchBar,并解析它的结构

三、各种属性、方法、代理的介绍

1、UISearchBarDelegate的介绍(文本改变Delegate、按钮点击Delegate、范围点击Delegate)

文本改变Delegate:

/**
询问代理是否开始搜索栏的编辑
@param searchBar 正在编辑的搜索栏
@return 如果返回YES则启动编辑会话。返回NO,则不启动编辑会话
*/
- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar {
NSLog(@"询问代理是否开始搜索栏的编辑");
return YES;
}
/**
询问代理是否应该在指定的搜索栏中停止编辑 @param searchBar 正在编辑的搜索栏
@return 如果返回YES则停止编辑,否则NO
*/
- (BOOL)searchBarShouldEndEditing:(UISearchBar *)searchBar {
NSLog(@"询问代理是否应该在指定的搜索栏中停止编辑");
return NO;
}
/**
当用户开始编辑时 @param searchBar 正在编辑的搜索栏
*/
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar {
NSLog(@"当用户开始编辑时");
}
/**
当用户更改了搜索文字 @param searchBar 正在编辑的搜索栏
@param searchText 搜索栏中的当前文本
@waring 当清楚搜索栏中的文字时,也会调用此方法
*/
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText {
NSLog(@"当用户更改了搜索文字");
}
/**
询问代理是否将指定范围内的文本替换为用户输入的文本 @param searchBar 正在编辑的搜索栏
@param range 要更改的文本范围
@param text 用于替换现有文本的文本
@return 如果返回YES,则替换。返回NO,则不替换
*/
- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
NSLog(@"询问代理是否将制定范围内的文本替换为给定的文本");
return YES;
}
/**
当用户已经编辑完搜索栏的文本
@param searchBar 正在编辑的搜索栏
@提示 通常可以在这个方法中执行基于搜索栏中文本的搜索
*/
- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar {
NSLog(@"当用户已经编辑完搜索栏的文本");
}

按钮点击Delegate:

/**
通知代理搜索栏书签按钮被用户点击
@param searchBar 被点击的搜索栏
@提示 搜索栏不会自动执行搜索栏的激活
*/
- (void)searchBarBookmarkButtonClicked:(UISearchBar *)searchBar {
NSLog(@"通知代理搜索栏书签按钮被用户点击");
} /**
通知代理用户点击了搜索栏的取消按钮
@param searchBar 被点击的搜索栏
@提示 可以用在此方法中关闭搜索栏
*/
- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar {
NSLog(@"通知代理用户点击了搜索栏的取消按钮");
} /**
通知代理用户点击了搜索按钮
@param searchBar 被点击的搜索栏
@提示 应该在这个方法中开始搜索操作
*/
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
NSLog(@"通知代理用户点击了搜索按钮");
} /**
通知代理用户点击了搜索结果列表按钮
@param searchBar 被点击的搜索栏
*/
- (void)searchBarResultsListButtonClicked:(UISearchBar *)searchBar {
NSLog(@"通知代理用户点击了搜索结果列表按钮");
}

范围点击Delegate:

/**
通知代理范围按钮的选择已经发生更改
@param searchBar 被点击的搜索栏
@param selectedScope 所选范围按钮的索引
*/
- (void)searchBar:(UISearchBar *)searchBar selectedScopeButtonIndexDidChange:(NSInteger)selectedScope {
NSLog(@"通知代理范围按钮的选择已经发生更改");
}

2、初始化UISearchBar

- (instancetype)init;
- (instancetype)initWithCoder:(NSCoder *)aDecoder;
- (instancetype)initWithFrame:(CGRect)frame;

3、处理UISearchBar的交互

@property(nonatomic, weak) id<UISearchBarDelegate> delegate;

4、UISearchBar的文本内容

// 搜索栏中占位符文本,默认为nil
@property(nonatomic, copy) NSString *placeholder; // 显示在搜索栏顶部的一行文本,默认为nil
@property(nonatomic, copy) NSString *prompt; // 搜索栏中的文本,默认为nil
@property(nonatomic, copy) NSString *text;

5、UISearchBar的外表属性

// 搜索栏外观的小节样式。这个属性可以和UISearchBarStyle一起使用
// UIBarStyleDefault = 0 默认值。使用通常与给定视图相关联的默认样式。例如,导航栏通常使用黑色内容的白色背景
// UIBarStyleBlack = 1 使用带浅色内容的黑色背景
// UIBarStyleBlackOpaque = 1 已过时。改用UIBarStyleBlack
// UIBarStyleBlackTranslucent = 2 已过时。改为设置translucent属性为YES来替代
@property(nonatomic) UIBarStyle barStyle; // 搜索栏的背景颜色。如果你将translucent设置为NO,该属性将不起作用
@property(nonatomic, strong) UIColor *barTintColor; // 设置搜索栏外观的搜索栏样式
@property(nonatomic) UISearchBarStyle searchBarStyle; // 该颜色将用于搜索栏中的关键元素
@property(nonatomic, strong) UIColor *tintColor; // 设置搜索栏是否半透明。默认为YES(半透明)
@property(nonatomic, assign, getter=isTranslucent) BOOL translucent;

6、自定义键盘的快捷键项目

// 该属性用于iPad上,在iPhone和iPod上不可用
@property(nonatomic, readonly, strong) UITextInputAssistantItem *inputAssistantItem;

7、按钮的配置

// 是否显示书签按钮,默认为NO
@property(nonatomic) BOOL showsBookmarkButton; // 是否显示取消按钮,默认值是NO。该属性不适用iPad
@property(nonatomic) BOOL showsCancelButton; // 使用动画效果显示或隐藏取消按钮
- (void)setShowsCancelButton:(BOOL)showsCancelButton
animated:(BOOL)animated; // 是否显示搜索结果按钮,默认为NO
@property(nonatomic) BOOL showsSearchResultsButton; // 表明搜索结果按钮是否处于被选中状态,默认为NO
@property(nonatomic, getter=isSearchResultsButtonSelected) BOOL searchResultsButtonSelected;

8、范围按钮

// 范围按钮上标题的数组,从左到右显示
@property(nonatomic, copy) NSArray<NSString *> *scopeButtonTitles; // 当前所选择的范围按钮的索引
@property(nonatomic) NSInteger selectedScopeButtonIndex; // 是否显示范围栏
@property(nonatomic) BOOL showsScopeBar;

9、设置UISearchBar的外观

// 搜索栏的背景图片
@property(nonatomic, strong) UIImage *backgroundImage; // 根据要求返回背景图片,默认为nil
- (UIImage *)backgroundImageForBarPosition:(UIBarPosition)barPosition
barMetrics:(UIBarMetrics)barMetrics; // 设置背景图片
- (void)setBackgroundImage:(UIImage *)backgroundImage
forBarPosition:(UIBarPosition)barPosition
barMetrics:(UIBarMetrics)barMetrics; // 返回给定状态、给定图标表示符常量下的图像
- (UIImage *)imageForSearchBarIcon:(UISearchBarIcon)icon
state:(UIControlState)state; // 设置指定的状态、指定的图片表示符常量下的图片
- (void)setImage:(UIImage *)iconImage
forSearchBarIcon:(UISearchBarIcon)icon
state:(UIControlState)state; // 返回指定图标的位置偏移量
- (UIOffset)positionAdjustmentForSearchBarIcon:(UISearchBarIcon)icon; // 设置指定图标的位置偏移量
- (void)setPositionAdjustment:(UIOffset)adjustment
forSearchBarIcon:(UISearchBarIcon)icon; // 搜索栏的输入附件视图
@property(nonatomic, readwrite, strong) UIView *inputAccessoryView; // 范围栏的背景颜色
@property(nonatomic, strong) UIImage *scopeBarBackgroundImage; // 返回指定状态下的范围栏的背景图片
- (UIImage *)scopeBarButtonBackgroundImageForState:(UIControlState)state; // 设置指定状态下的范围栏的背景图片
- (void)setScopeBarButtonBackgroundImage:(UIImage *)backgroundImage forState:(UIControlState)state; // 获取范围栏中左右段状态的图片
- (UIImage *)scopeBarButtonDividerImageForLeftSegmentState:(UIControlState)leftState rightSegmentState:(UIControlState)rightState; // 设置范围栏中左右段状态的图片
- (void)setScopeBarButtonDividerImage:(UIImage *)dividerImage
forLeftSegmentState:(UIControlState)leftState
rightSegmentState:(UIControlState)rightState; // 返回给定状态下的搜索栏按钮标题字符串的文本属性
- (NSDictionary<NSString *,id> *)scopeBarButtonTitleTextAttributesForState:(UIControlState)state; // 设置给定状态下的搜索栏按钮标题字符串的文本属性
- (void)setScopeBarButtonTitleTextAttributes:(NSDictionary<NSString *,id> *)attributes forState:(UIControlState)state; // 返回给定状态的搜索文本字段图像
- (UIImage *)searchFieldBackgroundImageForState:(UIControlState)state; // 设置给定状态的搜索文本字段图像
- (void)setSearchFieldBackgroundImage:(UIImage *)backgroundImage
forState:(UIControlState)state; // 搜索栏中搜索文文字字段背景的偏移量
@property(nonatomic) UIOffset searchFieldBackgroundPositionAdjustment; // 搜索栏中文字段背景中文本的偏移量
@property(nonatomic) UIOffset searchTextPositionAdjustment;

10、涉及到的常量

typedef NS_ENUM(NSInteger, UISearchBarIcon) {
UISearchBarIconSearch, // 搜索标示图片
UISearchBarIconClear, // 清楚标示图标
UISearchBarIconBookmark, // 书签标示图标
UISearchBarIconResultsList, // 结果标示图标
};
typedef NS_ENUM(NSUInteger, UISearchBarStyle) {
UISearchBarStyleDefault, // 搜索栏具有默认样式
UISearchBarStyleProminent, // 搜索栏具有半透明背景,搜索栏不透明
UISearchBarStyleMinimal // 搜索栏没有背景,并且搜索栏半透明
};
typedef NS_ENUM(NSInteger, UIBarStyle) {
UIBarStyleDefault = , // 默认值。使用通常与给定视图相关联的默认样式。例如,导航栏通常使用黑色内容的白色背景
UIBarStyleBlack = , // 使用带浅色内容的黑色背景
UIBarStyleBlackOpaque = , // 已过时。改用UIBarStyleBlack
UIBarStyleBlackTranslucent = , // 已过时。改为设置translucent属性为YES来替代
};
typedef struct UIOffset {
CGFloat horizontal, vertical;
} UIOffset;

四、日常使用配置

搜索栏UISearchBar的使用的更多相关文章

  1. iOS开发-搜索栏UISearchBar和UISearchController

    iOS中UISearchDisplayController用于搜索,搜索栏的重要性我们就不说了,狼厂就是靠搜索起家的,现在越来越像一匹没有节操的狼,UC浏览器搜索栏现在默认自家的神马搜索,现在不管是社 ...

  2. [转] iOS开发-搜索栏UISearchBar和UISearchController

    原文网址: http://www.cnblogs.com/xiaofeixiang/p/4273620.html?utm_source=tuicool iOS中UISearchDisplayContr ...

  3. iOS开发工具Xcode:Interface Builder

    简介: Interface Builder(IB)是Mac OS X平台下用于设计和测试用户界面(GUI)的应用程序(非开源).为了生成GUI,IB并不是必需的,实际上Mac OS X下所有的用户界面 ...

  4. [iOS基础控件 - 7.0] UIWebView

    A.基本使用 1.概念 iOS内置的浏览器控件 Safari浏览器就是通过UIWebView实现的   2.用途:制作简易浏览器 (1)基本请求 创建请求 加载请求 (2)代理监听webView加载, ...

  5. 《Photoshop智能手机APP界面设计》学习笔记-转

    第一章 APP用户界面基础 1.1 手机UI设计相关基本概念 1.1.1 什么是UI设计 UI(User's Interface)即用户界面,它不仅仅是美化界面,还需要研究用户,让界面变得更友好.简洁 ...

  6. 搜索控制器UISearchController的使用

    说明:本文主要是将系统UISearchController控件声明文件中的属性.方法.代理等介绍下,后续再联合[搜索栏UISearchBar]这篇文章一起更新更实用的信息. 1.初始化 // 如果设置 ...

  7. iOS开发--UIKit控件之UISearchBar(搜索栏)

    今天因为需求原因,需要用到搜索控件:之前一直没有用到过这个控件,所以去百度了一下,找到一篇可以说很齐全的资料,感谢这位作者. 然而,我并没有找到可以更改字体大小的属性或方法,希望有知道的告诉我一声,谢 ...

  8. iOS:搜索栏控件UISearchBar and SearchDisplayController的使用

    UISearchBar and SearchDisplayController控件: 这是一个带搜索栏和搜索显示控制器的控件,前面的SearchBar是一个搜索栏,它提供一个输入搜索条件的类似于文本框 ...

  9. 搜索栏会消失 uisearchbar 狂点消失的问题解决

    经过反复试验和错误很多,我发现当searchdisplaycontroller结束搜索,搜索栏会消失,所以我重新插入到搜索栏表头和它为我工作. - (void)searchDisplayControl ...

随机推荐

  1. 消息队列(五)--- RocketMQ-消息存储1

    问题 : 部署时如何知道自己是 broker 还是 NameServer topic 订阅信息放在哪里 broker 的作用到底是什么 纪录是如何持久化的 群发的时候,是如何储存消息的 send 方法 ...

  2. HDU 1016 素数环(dfs + 回溯)

    嗯... 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1016 一道很典型的dfs+回溯: 根据题意首先进行初始化,即第一个位置为1,然后进行dfs, ...

  3. Centos610安装Jdk1.8

    1.下载JDK 下载:  https://pan.baidu.com/s/15TYsE_wfSb48pS4SpUQKHA 提取码:fsx6 2.上传安装包 上传到linux 并拷贝到/opt/jdk目 ...

  4. ubuntu 虚拟机添加多个站点

    我们安装好lamp环境,然后开始操作,比如一个站点叫test.ubuntu1.com,一个叫test.ubuntu2.com 1.修改hosts文件,路径/etc/hosts sudo vim /et ...

  5. kafka单机搭建

    1.安装jdk1.8和zookeeper 2.下载kafka上传服务器 下载地址:http://archive.apache.org/dist/kafka/0.10.0.0/kafka_2.11-0. ...

  6. Deepin-linux下的linux的终端下软件安装和卸载方法

    1.方法一: sudo apt update #最好第一步是它 sudo apt install <package_name> --no-upgrade #安装该package但是不升级. ...

  7. 23 JavaScript规范与最佳实践&性能&箭头函数

    大多数web服务器(Apache等)对大小写敏感,因此命名注意大小写 不要声明字符串.数字和布尔值,始终把他们看做原始值而非对象,如果把这些声明为对象,会拖慢执行速度 对象是无法比较的,原始值可以 不 ...

  8. Nexus-配置vPC 实验一

    配置vPC的步骤:1.配置vPC domain2.配置vPC之间的keepalive link3.配置vPC之间的peer link4.配置vPCs5.确认双方配置一致 拓扑及描述:DC1-N7K-5 ...

  9. ANSYS 非线性材料模型简介1 ---常用弹塑性模型

    目录 1. 材料非线性 2. 三个准则 2.1 屈服准则 2.2 流动准则 2.3 强化准则 3. 常用弹塑性模型 3.1 双线性等向强化 3.2 多线性等向强化 3.3 非线性等向强化 3.4 双线 ...

  10. python搭建后台服务

    后端 # coding:utf-8 # 2019/10/22 16:01 # huihui # ref: from flask import Flask, abort, request, jsonif ...