iOS之让UISearchBar搜索图标和placeholder靠左显示
系统UISearchBar效果图:
需求效果图:
两种方案:
- 找到
UISearchBar上的放大镜图标, 修改Frame. 同时判断在有无文本内容更改placeholder的颜色. - 利用
UISearchBar的Text有值后, 放大镜自动靠左特性, 让UISearchBar设置一个默认的Text, 在点击UISearchBar开始编辑后, 如果没有值,设置Text为则@"", 同时还要根据状态修改placeholderLabel的颜色.(太繁琐, 不推荐!)
实现代码:
@interface ViewController () <UISearchBarDelegate> /** xib搜索框 */
@property (weak, nonatomic) IBOutlet UISearchBar *searchBar;
/** 搜索图片(放大镜) */
@property (nonatomic, weak) UIImageView *imgV;
@end
@implementation ViewController - (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
// 查找放大镜图片ImageView
for (UIImageView *imgV in _searchBar.subviews.firstObject.subviews.lastObject.subviews) {
if ([imgV isMemberOfClass:[UIImageView class]]) {
imgV.frame = CGRectMake(, 7.5, , );
_imgV = imgV;
[_imgV addObserver:self forKeyPath:@"frame" options:NSKeyValueObservingOptionNew context:nil];
}
}
// 设置searchBar文本颜色
[self updateSeachBar];
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context
{
// 修改放大镜Frame前, 移除观察者
[_imgV removeObserver:self forKeyPath:@"frame"];
// 修改Frame
_imgV.frame = CGRectMake(, 7.5, , );
// 再次添加观察者
[_imgV addObserver:self forKeyPath:@"frame" options:NSKeyValueObservingOptionNew context:nil];
}
#pragma mark -UISearchBarDelegate代理方法
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
{
if ([searchBar.text isEqualToString:searchBar.placeholder]) {
// 无文本时, 显示placeholder
searchBar.text = @"";
}
// 获取到UISearchBar中UITextField
UITextField *searchField = [searchBar valueForKey:@"_searchField"];
// 开始编辑要修改textColor颜色
searchField.textColor = [UIColor blackColor];
searchField.clearButtonMode = UITextFieldViewModeWhileEditing;
}
- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar
{
[self updateSeachBar];
}
#pragma mark -根据文本内容设置searchBar颜色及clearButtonMode
- (void)updateSeachBar
{
if ([_searchBar.text isEqualToString:@""]) {// 文本内容为空时
UITextField *searchField = [_searchBar valueForKey:@"_searchField"];
// 修改textColor为placeholderColor
searchField.textColor = [searchField valueForKeyPath:@"_placeholderLabel.textColor"];
searchField.text = searchField.placeholder;
// 去除右侧clearButton
searchField.clearButtonMode = UITextFieldViewModeNever;
}
}
- (void)dealloc
{
// 移除观察者
[_searchBar removeObserver:self forKeyPath:@"frame"];
}
iOS之让UISearchBar搜索图标和placeholder靠左显示的更多相关文章
- ios UISearchBar搜索框的基本使用
摘要: 小巧简洁的原生搜索框,漂亮而易用,如果我们的应用没有特殊需求,都可以使用它. iOS中UISearchBar(搜索框)使用总结 初始化:UISearchBar继承于UIView,我们可以像创建 ...
- iOS开发-搜索栏UISearchBar和UISearchController
iOS中UISearchDisplayController用于搜索,搜索栏的重要性我们就不说了,狼厂就是靠搜索起家的,现在越来越像一匹没有节操的狼,UC浏览器搜索栏现在默认自家的神马搜索,现在不管是社 ...
- iOS开发之UISearchBar初探
iOS开发之UISearchBar初探 UISearchBar也是iOS开发常用控件之一,点进去看看里面的属性barStyle.text.placeholder等等.但是这些属性显然不足矣满足我们的开 ...
- [转] iOS开发-搜索栏UISearchBar和UISearchController
原文网址: http://www.cnblogs.com/xiaofeixiang/p/4273620.html?utm_source=tuicool iOS中UISearchDisplayContr ...
- iOS 如何自定义UISearchBar 中textField的高度
iOS 如何自定义UISearchBar 中textField的高度 只需设置下边的方法就可以 [_searchBar setSearchFieldBackgroundImage:[UIImage i ...
- input中加入搜索图标
刚吃了一份宫保鸡丁刀削面,幸福感满满,写篇博客消耗一下热量. 今天工作遇到的一个问题是在input输入框中加入图标,当输入内容后,图标和提示语一起隐藏,类似于placeholder的功能.如淘宝页面, ...
- MUI - H5实现ios长按图标后进入图标排序及删除功能的效果
html5实现ios长按图标后进入图标排序及删除功能的效果 我们知道在ios(国产定制安卓系统基本都有)设备上按下图标,图标就会不停的抖动,并且可以随心拖动排序和删除. 那么问题来了,我们怎么通过ht ...
- ico图标在谷歌浏览器中如何显示?
http://www.zen-cart.cn/forum/topic266117.html 版主: shaning 发表回复 2 篇帖子 • 分页: 1 / 1 ico图标在谷歌浏览器中如何显示? ...
- 关键字搜索:jQuery过滤器插件fastLiveFilter||显示结果条数
引用js库 <script src="jquery-1.6.4.min.js"></script> <script src="jquery. ...
随机推荐
- C语言各类型大小,结构体大小 sizeof(struct A)
C语言类型大小总览 编译器pack指令 #pragma pack(n)——定义n字节对齐 C++固有类型的对齐取编译器对齐与自身大小中较小的一个 32位C++默认8字节对齐.gcc编译器默认4字节对齐 ...
- flutter实现(OutlineButton)线框按钮
在flutter的控件里 常用按钮有:FlatButton,RaisedButton,FloatingActionButton,OutlineButton. FlatButton是扁平的,没有阴影的. ...
- ArrayMap代替HashMap
ArrayMap是一个<key,value>映射的数据结构,它设计上更多的是考虑内存的优化,内部是使用两个数组进行数据存储,一个数组记录key的hash值,另外一个数组记录Value值,它 ...
- eclipse安装python
在Eclipse中安装pydev插件 启动Eclipse, 点击Help->Install New Software... 在弹出的对话框中,点Add 按钮. Name中填:Pydev, ...
- 使用 Azure CLI 创建 Linux 虚拟机
Azure CLI 用于从命令行或脚本创建和管理 Azure 资源. 本指南详细介绍了如何使用 Azure CLI 部署运行 Ubuntu 服务器的虚拟机. 服务器部署以后,将创建 SSH 连接,并且 ...
- MACOS root密码忘了怎么办?
MAC中ROOT用户很少用到,有时又手贱,给设了密码,过一阵忘了密码,很尴尬
- 借助System.Linq.Dynamic, IQueryable根据排序字符串排序
在使用Entity Framework时,若有多个排序,需要OrderBy (OrderByDescending)再ThenBy (ThenByDescending) 假设需要根据Name升序排序,再 ...
- AppHangB1:explorer进程停止与Windows交互
现象:Windows 7,打开 “计算机” 的时候,资源管理器卡死,如图所示. 解决方法:卸载 CAD迷你看图软件,利用 CCleaner 清除注册表.
- javascript excel
js做的 excel , http://handsontable.com/ js keyCode对照表 http://dwz.cn/Lknbz
- 反射工具类.提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class,被AOP过的真实类等工具函数.java
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.Validate; import org.ap ...