ios开发搜索框
来源:互联网 发布:机械零件加工制作软件 编辑:程序博客网 时间:2024/05/22 13:03
一、简单说明
在“发现”控制器的导航栏中间放置一个搜索框。
1.第一种实现方案
第一种实现方案:最简单的方案(直接使用系统的UISearchBar)
实现代码:
//// YYDiscoverViewController.m//#import "YYDiscoverViewController.h"@interface YYDiscoverViewController ()@end@implementation YYDiscoverViewController- (void)viewDidLoad{ [super viewDidLoad]; //在导航栏按钮上,添加一个搜索框 //使用UISearchBar UISearchBar *bar=[[UISearchBar alloc]init]; //设置bar的frame bar.frame=CGRectMake(0, 0, 300, 35); self.navigationItem.titleView=bar; }@end
2.第二种实现方案:
第一种方案存在的不足之处:系统的搜索框偏白色,和导航栏的颜色很相近,显示效果很难看。
分析新浪微博应用,可以知道官方提供了放大镜和搜索框的背景图片。
那么第二种方案,我们尝试使用它提供的背景图片来完成搜索框的功能
导入相应的图片素材
首先,我们可以尝试给searchBar设置背景图片,查看效果。
//// YYDiscoverViewController.m//#import "YYDiscoverViewController.h"@interface YYDiscoverViewController ()@end@implementation YYDiscoverViewController- (void)viewDidLoad{ [super viewDidLoad]; //在导航栏按钮上,添加一个搜索框 /*第一种方案 UISearchBar *bar=[[UISearchBar alloc]init]; //设置bar的frame bar.frame=CGRectMake(0, 0, 300, 35); bar.backgroundImage=[UIImage resizedImage:@"searchbar_textfield_background"]; self.navigationItem.titleView=bar; */ //第二种方案 //使用UISearchBar UISearchBar *bar=[[UISearchBar alloc]init]; //设置bar的frame bar.frame=CGRectMake(0, 0, 300, 35); bar.backgroundImage=[UIImage resizedImage:@"searchbar_textfield_background"]; self.navigationItem.titleView=bar; }@end
在ios7系统下,看不出有什么不同的效果,在IOS6的系统下运行,显示效果如下:
要去掉搜索框内部的椭圆属性,但是searchBar并没有为我们提供相应的方法,所以这种做法被放弃。
注意:对图片进行保护性拉伸,而不是平铺,searchBar自己的属性不好用,设置其样式时只支持ios7,放弃这种方法。
为Image提供一个分类,扩充方法:
分类方法的头文件为:
//// UIImage+Extension.h//#import <UIKit/UIKit.h>@interface UIImage (Extension)/** *根据图片名自动加载适配IOS6和iOS7的图片 */+ (UIImage *)imageWithName:(NSString *)name;/** * 根据图片名返回一张能自由拉伸的图片 */+ (UIImage *)resizedImage:(NSString *)name;@end
扩充方法的实现为:
//// UIImage+Extension.m//#import "UIImage+Extension.h"@implementation UIImage (Extension)+ (UIImage *)imageWithName:(NSString *)name{ UIImage *image = nil; if (iOS7) { // 处理iOS7的情况 NSString *newName = [name stringByAppendingString:@"_os7"]; image = [UIImage imageNamed:newName]; } if (image == nil) { image = [UIImage imageNamed:name]; } return image;}+ (UIImage *)resizedImage:(NSString *)name{ UIImage *image = [UIImage imageWithName:name]; return [image stretchableImageWithLeftCapWidth:image.size.width * 0.5 topCapHeight:image.size.height * 0.5];}@end
3.第三种实现方案:
使用一个textfield自定义一个搜索框。
设置搜索框的宽高,背景图片。
//第三种方案 UITextField *searchBar=[[UITextField alloc]init]; //设置frmae searchBar.width=300; searchBar.height=35; //设置背景图片 searchBar.background=[UIImage resizedImage:@"searchbar_textfield_background"]; //添加到导航栏中 self.navigationItem.titleView=searchBar;
显示效果如下:
新的问题:光标(输入的文字)不居中,在类中没有垂直居中这个属性。
技巧:一个属性如果找不到的话,可以去它的父类中进行查找
设置内容垂直居中(父类中的属性)
UITextField *searchBar=[[UITextField alloc]init]; //设置frmae searchBar.width=300; searchBar.height=35; //设置背景图片 searchBar.background=[UIImage resizedImage:@"searchbar_textfield_background"];// searchBar.textAlignment=NSTextAlignmentCenter;//说明:这是设置文字水平居中 //设置文字内容垂直居中 searchBar.contentVerticalAlignment=UIControlContentVerticalAlignmentCenter; //添加到导航栏中 self.navigationItem.titleView=searchBar;
新的问题:怎么往搜索框中放一个放大镜—使用leftView属性
UITextField *searchBar=[[UITextField alloc]init]; //设置frmae searchBar.width=300; searchBar.height=35; //设置背景图片 searchBar.background=[UIImage resizedImage:@"searchbar_textfield_background"];// searchBar.textAlignment=NSTextAlignmentCenter;//说明:这是设置文字水平居中 //设置文字内容垂直居中 searchBar.contentVerticalAlignment=UIControlContentVerticalAlignmentCenter; //设置左边的放大镜 UIImageView *leftView=[[UIImageView alloc]init]; leftView.image=[UIImage imageWithName:@"searchbar_textfield_search_icon"]; searchBar.leftView=leftView; //添加到导航栏中 self.navigationItem.titleView=searchBar;
添加之后,看不到放大镜?
解决方法,这里需要设置两个属性:
(1)设置leftView的size
(2)设置leftView的leftViewMode属性,因为leftViewMode默认情况下为永远不显示。
(3)调整距离
设置leftView的内容居中,让放大镜距离搜索框左边有一定的间距
contentMode=UIViewContentModeCenter
实现代码:
#import "YYDiscoverViewController.h"@interface YYDiscoverViewController ()@end@implementation YYDiscoverViewController- (void)viewDidLoad{ [super viewDidLoad]; //在导航栏按钮上,添加一个搜索框 /*第一种方案 UISearchBar *bar=[[UISearchBar alloc]init]; //设置bar的frame bar.frame=CGRectMake(0, 0, 300, 35); bar.backgroundImage=[UIImage resizedImage:@"searchbar_textfield_background"]; self.navigationItem.titleView=bar; */ /*第二种方案 //使用UISearchBar UISearchBar *bar=[[UISearchBar alloc]init]; //设置bar的frame bar.frame=CGRectMake(0, 0, 300, 35); bar.backgroundImage=[UIImage resizedImage:@"searchbar_textfield_background"]; self.navigationItem.titleView=bar; */ //第三种方案 UITextField *searchBar=[[UITextField alloc]init]; //设置frmae searchBar.width=300; searchBar.height=35; //设置背景图片 searchBar.background=[UIImage resizedImage:@"searchbar_textfield_background"];// searchBar.textAlignment=NSTextAlignmentCenter;//说明:这是设置文字水平居中 //设置文字内容垂直居中 searchBar.contentVerticalAlignment=UIControlContentVerticalAlignmentCenter; //设置左边的放大镜 UIImageView *leftView=[[UIImageView alloc]init]; leftView.image=[UIImage imageWithName:@"searchbar_textfield_search_icon"]; searchBar.leftView=leftView; //设置leftView的frame leftView.width=40; leftView.height=35; //设置leftViewMode searchBar.leftViewMode=UITextFieldViewModeAlways; //设置放大镜距离左边的间距,设置leftView的内容居中 leftView.contentMode=UIViewContentModeCenter; //添加到导航栏中 self.navigationItem.titleView=searchBar;}@end
实现效果:
补充:点击清除掉搜索框中的所有内容
设置右边永远显示清除按钮(马桶原理)
clearButtonMode=UITextFieldViewModeALways
- ios开发搜索框
- IOS开发----UISearchBar,搜索框的使用
- iOS 开发搜索框 - 简单实现
- iOS开发——搜索框(UISearchController)
- ios开发之uiTableView增加搜索框
- iOS开发 ☞ 自定义搜索框
- iOS开发 之 搜索
- iOS开发-搜索栏 UISearchController
- ios-新浪微博开发07-自定义搜索框
- UISearchController搜索框偏移问题 - 芒果iOS开发
- IOS笔记 搜索框
- 自定义iOS搜索框
- iOS搜索框UISearchBar
- ios 搜索框
- iOS搜索框
- iOS 搜索框
- iOS 搜索框
- 仿IOS搜索框
- 汉诺塔分析
- JavaScript谬论体系
- Android Studio(03)——签名打包以及其它问题
- 为什么要听古典音乐
- 全屏,去标题栏,去状态栏
- ios开发搜索框
- 安卓开发者必备的42个链接
- hdu 1022----Train Problem I(栈)
- OC基本数据结构-NSArray
- Linux的/etc/inittab文件中init级别设置成6(重启)或者不支持级别的解决方法
- 《数据结构编程实验》 1.5.9排列
- 篇幅不定,更新时间不定~~~~
- HDU 1251 统计难题 (Trie树 模板题)
- POJ-1750(缩进控制)