您好,登錄后才能下訂單哦!
在IOS混飯吃的同志們都很清楚,搜索框在移動開發應用中的地位。今天我們就結合下拉列表框的實現來聊聊UISearchBar的使用。本人新入行的菜鳥一個,不足之處請多多指教。直接上代碼。
UISearchBar控件的聲明:(在控制器DownListViewController中)
- @property (nonatomic,retain) UISearchBar* searchBar;
控件的初始化:
- _searchBar = [[UISearchBar alloc]initWithFrame:CGRectMake(0, 0, 320, 40)];
- _searchBar.placeholder = @"test"; //設置占位符
- _searchBar.delegate = self; //設置控件代理
當然,做完這些工作之后,我們還要在將控件添加到父視圖之上,也可以把他設置成UITableView的tableHeaderView屬性值,由于大家需求不一,這里就不再給出代碼。
前面,我們設置了控件的代理,當然我們必須讓控制器(DownListViewController)的 .h 文件實現 UISearchBarDelegate 協議,然后我們繼續, 我們要在 .m 文件中實現協議方法:
- #pragma mark -
- #pragma mark UISearchBarDelegate
- //搜索框中的內容發生改變時 回調(即要搜索的內容改變)
- - (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{
- NSLog(@"changed");
- if (_searchBar.text.length == 0) {
- [self setSearchControllerHidden:YES]; //控制下拉列表的隱現
- }else{
- [self setSearchControllerHidden: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(@"shuould begin");
- return YES;
- }
- - (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar {
- searchBar.text = @"";
- NSLog(@"did begin");
- }
- - (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar {
- NSLog(@"did end");
- searchBar.showsCancelButton = NO;
- }
- - (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
- NSLog(@"search clicked");
- }
- //點擊搜索框上的 取消按鈕時 調用
- - (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar {
- NSLog(@"cancle clicked");
- _searchBar.text = @"";
- [_searchBar resignFirstResponder];
- [self setSearchControllerHidden:YES];
- }
至此,搜索框的實現就搞定了,怎么樣簡單吧。下面我們來講講下拉列表框的實現,先說說他的實現原理或者是思路吧。下拉列表框我們用一個控制器來實現,我們新建一個控制器SearchViewController.
- @interface SearchViewController : UITableViewController
- @end
在 .m 文件中,我們實現該控制器
- - (id)initWithStyle:(UITableViewStyle)style
- {
- self = [super initWithStyle:style];
- if (self) {
- // Custom initialization
- }
- return self;
- }
- - (void)viewDidLoad
- {
- [super viewDidLoad];
- self.tableView.layer.borderWidth = 1;
- self.tableView.layer.borderColor = [[UIColor blackColor] CGColor];
- }
然后實現控制器的數據源,
- #pragma mark -
- #pragma mark Table view data source
- - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
- return 1;
- }
- - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
- // 返回列表框的下拉列表的數量
- return 3;
- }
- // Customize the appearance of table view cells.
- - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
- static NSString *CellIdentifier = @"Cell";
- UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
- if (cell == nil) {
- cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] ;
- }
- // Configure the cell...
- NSUInteger row = [indexPath row];
- cell.textLabel.text = @"down list";
- return cell;
- }
這樣列表框的控制器就實現了。接下來我們就來看看怎么讓出現、隱藏。這點我們利用UIView的動畫效果來實現,我們在DownListViewController控制器中 增加一個方法:
- - (void) setSearchControllerHidden:(BOOL)hidden {
- NSInteger height = hidden ? 0: 180;
- [UIView beginAnimations:nil context:nil];
- [UIView setAnimationDuration:0.2];
- [_searchController.view setFrame:CGRectMake(30, 36, 200, height)];
- [UIView commitAnimations];
- }
我們只需調用該方法就可以了。現在我們看看DownListViewController的布局方法
- - (void)viewDidLoad
- {
- [super viewDidLoad];
- _searchBar = [[UISearchBar alloc]initWithFrame:CGRectMake(0, 0, 320, 40)];
- _searchBar.placeholder = @"test";
- _searchBar.delegate = self;
- _tableview = [[UITableView alloc]initWithFrame:self.view.bounds style:UITableViewStylePlain];
- _tableview.dataSource = self;
- _tableview.tableHeaderView = _searchBar;
- _searchController = [[SearchViewController alloc] initWithStyle:UITableViewStylePlain];
- [_searchController.view setFrame:CGRectMake(30, 40, 200, 0)];
- [self.view addSubview:_tableview];
- [self.view addSubview:_searchController.view];
- }
這樣一切都搞定了。
好了,總結一下:
我們用了兩個控制器:DownListViewController(搜索框的實現 和 控制下拉列表框的出現與隱藏)和SearchViewController(下拉列表框的實現)。在DownListViewController中我們聲明并初始化 UISearchBar和SearchViewController(高度開始設置為零),用動畫來實現下拉列表框的出現與隱藏。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。