iOS 开发 oc 如何设置UISearchBar,并将searchbar放在顶部一个view上,并提供demo或者完整代码

113 阅读2分钟

要在iOS开发中使用Objective-C设置UISearchBar并将其放置在一个视图的顶部,可以按照以下步骤进行操作。这里提供一个完整的示例代码,结合了我搜索到的资料中的相关信息。

步骤

  1. 创建UITableView
  2. 创建UISearchBar
  3. 将UISearchBar设置为UITableView的表头视图
  4. 实现UISearchBarDelegate协议方法

完整代码示例

#import "ViewController.h"

@interface ViewController () <UITableViewDelegate, UITableViewDataSource, UISearchBarDelegate>

@property (nonatomic, strong) UITableView *tableView;

@property (nonatomic, strong) UISearchBar *searchBar;

@property (nonatomic, strong) NSMutableArray *dataList;

@property (nonatomic, strong) NSMutableArray *searchList;

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

// 初始化数据

self.dataList = [NSMutableArray arrayWithObjects:@"Apple", @"Banana", @"Cherry", @"Date", @"Elderberry", @"Fig", @"Grape", nil];

self.searchList = [NSMutableArray array];

// 创建UITableView

self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height) style:UITableViewStylePlain];

self.tableView.delegate = self;

self.tableView.dataSource = self;

[self.view addSubview:self.tableView];

// 创建UISearchBar

self.searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 44)];

self.searchBar.placeholder = @"搜索";

self.searchBar.delegate = self;

self.searchBar.autocorrectionType = UITextAutocorrectionTypeNo;

self.searchBar.autocapitalizationType = UITextAutocapitalizationTypeNone;

// 将UISearchBar设置为UITableView的表头视图

self.tableView.tableHeaderView = self.searchBar;

}

#pragma mark - UITableViewDataSource

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

if (self.searchBar.text.length > 0) {

return self.searchList.count;

} else {

return self.dataList.count;

}

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *cellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

if (!cell) {

cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];

}

if (self.searchBar.text.length > 0) {

cell.textLabel.text = self.searchList[indexPath.row];

} else {

cell.textLabel.text = self.dataList[indexPath.row];

}

return cell;

}

#pragma mark - UISearchBarDelegate

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText {

if (searchText.length == 0) {

self.searchList = nil;

} else {

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF contains[c] %@", searchText];

self.searchList = [NSMutableArray arrayWithArray:[self.dataList filteredArrayUsingPredicate:predicate]];

}

[self.tableView reloadData];

}

- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar {

searchBar.text = @"";

self.searchList = nil;

[self.tableView reloadData];

}

@end

代码说明

  1. 数据初始化:在viewDidLoad方法中初始化数据数组dataList和搜索结果数组searchList。
  2. 创建UITableView:创建一个UITableView实例,并设置其委托和数据源为当前视图控制器。
  3. 创建UISearchBar:创建一个UISearchBar实例,并设置其位置、样式、占位符、按钮显示等属性。
  4. 设置表头视图:将UISearchBar设置为UITableView的表头视图。
  5. 实现代理方法
  • tableView:numberOfRowsInSection::根据搜索状态返回不同的数据源数组的行数。
  • tableView:cellForRowAtIndexPath::根据搜索状态设置单元格的文本内容。
  • searchBar:textDidChange::根据搜索文本过滤数据并更新搜索结果数组。
  • searchBarCancelButtonClicked::清除搜索文本并重置搜索结果数组。

通过以上步骤和代码示例,你可以在iOS应用中实现一个带有搜索功能的UITableView,并将UISearchBar放置在视图的顶部。