UISearchBar的使用以及下拉列表框的实现
在IOS混饭吃的同志们都很清楚,搜索框在移动开发应用中的地位。今天我们就结合下拉列表框的实现来聊聊UISearchBar的使用。本人新入行的菜鸟一个,不足之处请多多指教。直接上代码。
UISearchBar控件的声明:(在控制器DownListViewController中)
@property(nonatomic,retain)UISearchBar*searchBar;
控件的初始化:
_searchBar=[[UISearchBaralloc]initWithFrame:CGRectMake(0,0,320,40)];_searchBar.placeholder=@"test";//设置占位符_searchBar.delegate=self;//设置控件代理
当然,做完这些工作之后,我们还要在将控件添加到父视图之上,也可以把他设置成UITableView的tableHeaderView属性值,由于大家需求不一,这里就不再给出代码。
前面,我们设置了控件的代理,当然我们必须让控制器(DownListViewController)的 .h 文件实现 UISearchBarDelegate 协议,然后我们继续, 我们要在 .m 文件中实现协议方法:
#pragmamark-#pragmamarkUISearchBarDelegate//搜索框中的内容发生改变时 回调(即要搜索的内容改变)-(void)searchBar:(UISearchBar*)searchBartextDidChange:(NSString*)searchText{NSLog(@"changed");if(_searchBar.text.length==0){[selfsetSearchControllerHidden:YES]; //控制下拉列表的隐现}else{[selfsetSearchControllerHidden:NO];}}
-(BOOL)searchBarShouldBeginEditing:(UISearchBar*)searchBar{searchBar.showsCancelButton=YES; for(id cc in [searchBar subviews])
{
if([cc isKindOfClass:[UIButton class]])
{
UIButton *btn = (UIButton *)cc;
[btn setTitle:@"取消" forState:UIControlStateNormal];
}
}
NSLog(@"shuouldbegin");returnYES;}-(void)searchBarTextDidBeginEditing:(UISearchBar*)searchBar{searchBar.text=@"";NSLog(@"didbegin");}-(void)searchBarTextDidEndEditing:(UISearchBar*)searchBar{NSLog(@"didend");searchBar.showsCancelButton=NO;}-(void)searchBarSearchButtonClicked:(UISearchBar*)searchBar{NSLog(@"searchclicked");}//点击搜索框上的 取消按钮时 调用-(void)searchBarCancelButtonClicked:(UISearchBar*)searchBar{NSLog(@"cancleclicked");_searchBar.text=@"";[_searchBarresignFirstResponder];[selfsetSearchControllerHidden:YES];}
至此,搜索框的实现就搞定了,怎么样简单吧。下面我们来讲讲下拉列表框的实现,先说说他的实现原理或者是思路吧。下拉列表框我们用一个控制器来实现,我们新建一个控制器SearchViewController.
@interfaceSearchViewController:UITableViewController@end
在 .m 文件中,我们实现该控制器
-(id)initWithStyle:(UITableViewStyle)style{self=[superinitWithStyle:style];if(self){//Custominitialization}returnself;}-(void)viewDidLoad{[superviewDidLoad];self.tableView.layer.borderWidth=1;self.tableView.layer.borderColor=[[UIColorblackColor]CGColor];}
然后实现控制器的数据源,
#pragmamark-#pragmamarkTableviewdatasource
-(NSInteger)numberOfSectionsInTableView:(UITableView*)tableView{
return1;}-(NSInteger)tableView:(UITableView*)tableViewnumberOfRowsInSection:(NSInteger)section{// 返回列表框的下拉列表的数量
return3;}//Customizetheappearanceoftableviewcells.-(UITableViewCell*)tableView:(UITableView*)tableViewcellForRowAtIndexPath:(NSIndexPath*)indexPath{staticNSString*CellIdentifier=@"Cell";UITableViewCell*cell=[tableViewdequeueReusableCellWithIdentifier:CellIdentifier];if(cell==nil){cell=[[UITableViewCellalloc]initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:CellIdentifier];}//Configurethecell...NSUIntegerrow=[indexPathrow];cell.textLabel.text=@"downlist";returncell;}
这样列表框的控制器就实现了。接下来我们就来看看怎么让出现、隐藏。这点我们利用UIView的动画效果来实现,我们在DownListViewController控制器中 增加一个方法:
-(void)setSearchControllerHidden:(BOOL)hidden{NSIntegerheight=hidden?0:180;[UIViewbeginAnimations:nilcontext:nil];[UIViewsetAnimationDuration:0.2];[_searchController.viewsetFrame:CGRectMake(30,36,200,height)];[UIViewcommitAnimations];}
我们只需调用该方法就可以了。现在我们看看DownListViewController的布局方法
-(void)viewDidLoad{[superviewDidLoad];_searchBar=[[UISearchBaralloc]initWithFrame:CGRectMake(0,0,320,40)];_searchBar.placeholder=@"test";_searchBar.delegate=self;_tableview=[[UITableViewalloc]initWithFrame:self.view.boundsstyle:UITableViewStylePlain];_tableview.dataSource=self;_tableview.tableHeaderView=_searchBar;_searchController=[[SearchViewControlleralloc]initWithStyle:UITableViewStylePlain];[_searchController.viewsetFrame:CGRectMake(30,40,200,0)];[self.viewaddSubview:_tableview];[self.viewaddSubview:_searchController.view];}
这样一切都搞定了。
好了,总结一下:
我们用了两个控制器:DownListViewController(搜索框的实现 和 控制下拉列表框的出现与隐藏)和SearchViewController(下拉列表框的实现)。在DownListViewController中我们声明并初始化 UISearchBar和SearchViewController(高度开始设置为零),用动画来实现下拉列表框的出现与隐藏。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。