UISearchBar的使用以及下拉列表框的实现

在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];

}

这样一切都搞定了。

时间: 2024-07-28 16:38:56

UISearchBar的使用以及下拉列表框的实现的相关文章

iOS中的UISearchBar

在大多数app中都会用到搜索功能,那么搜索功能的实现离不开UISearchBar这个控件. UISearchBar继承自UIView,下面简单的介绍一下它的属性和方法. p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 15.0px Menlo; color: #3495af } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 15.0px Menlo } span.s1 { color: #000000 }

新浪微博客户端(5)-自定义UISearchBar

iOS自带的UISearchBar有很多限制,我们可以使用UITextField做出一个类似于SearchBar的效果. //================================================= // 自定义SearchBar //================================================= // 1.创建一个UITextField作为背景 UITextField *searchBar = [[UITextField alloc

修改UISearchBar的背景颜色

当你看到这篇博客你就已经发现了用_searchBar.backgroundColor = [UIColor clearColor];来设置UISearchBar的颜色完全没有效果: 并且,有些方法是想通过遍历出UISearchBarBackground来移除它实现背景透明,也并没有什么卵用. 下面这个方法,你不用纠结它是怎么实现的,直接复制拿去用: _searchBar.backgroundImage = [self imageWithColor:[UIColor clearColor] siz

UISearchBar

1.UISearchBar的基本属性 // 初始化 _searchBar = [[UISearchBar alloc] initWithFrame:CGRectZero]; [self.searchBar setPlaceholder:@"Search"];// 搜索框的占位符 [self.searchBar setPrompt:@"Prompt"];// 顶部提示文本,相当于控件的Title [self.searchBar setBarStyle:UIBarMet

UISearchBar(搜索框)

初始化:UISearchBar继承于UIView,我们可以像创建View那样创建searchBar     UISearchBar * bar = [[UISearchBar alloc]initWithFrame:CGRectMake(20, 100, 250, 40)];     [self.view addSubview:bar]; @property(nonatomic)        UIBarStyle              barStyle; 这个属性可以设置searchBar

UISearchBar和UISearchDisplayController

UISearchBar和UISearchDisplayController实例应用 程序介绍:获取系统通讯录,利用 UISearchBar和UISearchDisplayController实现搜索功能 1 #import <UIKit/UIKit.h> 2 3 @interface ViewController : UIViewController<UITableViewDataSource,UITableViewDelegate,UISearchBarDelegate,UISearc

iOS --- 搜索框UISearchController的使用(iOS8.0以后替代UISearchBar + UISearchDisplayController的组合)

在iOS 8.0以上版本中, 我们可以使用UISearchController来非常方便地在UITableView中添加搜索框. 而在之前版本中, 我们还是必须使用UISearchBar + UISearchDisplayController的组合方式. 添加UISearchController属性: @property(strong, nonatomic) UISearchController *searchController; @property(strong, nonatomic) NS

ios开发入门篇(四):UIWebView结合UISearchBar的简单用法

 UIWebView是ios开发中比较常用的一个控件.我们可以用它来浏览网页.打开文档等,今天笔者在这里简单介绍下UIWebView和UISearchBar结合起来的用法,做一个简单的类浏览器. 一:首先定义这两个控件,并在.h文件中实现UISearchBarDelegate,UIWebViewDelegate两个代理 @interface TestView : UIViewController<UISearchBarDelegate,UIWebViewDelegate> @property(

现在通过json和gson来实现完成一个级联下拉列表框

现在通过json和gson来实现完成一个级联下拉列表框(例如:省市联动) 1.前台jsp页面: <select name="address.upLeverId" id="Townside1"> <span style="white-space:pre"> </span><option value="-1">请选择</option> <s:iterator val