如何在 iOS 10 的目标 c 中使用 uisearchbar?

Posted

技术标签:

【中文标题】如何在 iOS 10 的目标 c 中使用 uisearchbar?【英文标题】:How to use the uisearchbar in objective c in iOS 10? 【发布时间】:2018-08-24 01:49:57 【问题描述】:

我想在表格视图控制器中添加uisearchbar,但是我在ios 9中搜索了uisearchbar教程并尝试了它。我无法在我的项目模拟器上显示 uisearchbar。它也没有搜索功能。如果我通过代码“self.tableView.contentOffset = CGPointMake(0, CGRectGetHeight(self.searchController.searchBar.frame));”,Xcode 将显示错误消息。这条消息是“libc++abi.dylib: terminating with uncaught exception of type NSException”。

能告诉我哪里错了吗?

平台:iOS 10.3 中的 iPhone 和 iOS 10.3 中的 iPad Xcode 版本:8.3.3 (8E3004b)

.h 文件

#import <UIKit/UIKit.h>

@interface SearchBarTableViewController : UITableViewController <UISearchControllerDelegate, UISearchBarDelegate, UISearchResultsUpdating>
@property (nonatomic, strong) UISearchController *searchController;
@property (weak, nonatomic) IBOutlet UISearchBar *searchBar;
@property(nonatomic,strong) NSMutableArray *RowArray;

@end

.m 文件

#pragma mark Search bar Part
- (void)viewWillAppear:(BOOL)animated 
[super viewWillAppear:animated];

if (!_searchController.searchBar.superview) 
    self.tableView.tableHeaderView = self.searchController.searchBar;

if (!self.searchController.active && self.searchController.searchBar.text.length == 0) 
    self.tableView.contentOffset = CGPointMake(0, CGRectGetHeight(self.searchController.searchBar.frame));




- (void)viewWillDisappear:(BOOL)animated 
[super viewWillDisappear:animated];

if (self.searchController.isActive) 
    self.searchController.active = NO;



#pragma mark - Getters / Setters

- (UISearchController *)searchController 
if (!_searchController) 
    _searchController = [[UISearchController alloc]initWithSearchResultsController:nil];
    _searchController.searchResultsUpdater = self;
    _searchController.dimsBackgroundDuringPresentation = NO;
    _searchController.searchBar.delegate = self;
    [_searchController.searchBar sizeToFit];

return _searchController;


- (NSArray *)searchResults 
NSString *searchString = self.searchController.searchBar.text;
if (searchString.length > 0) 
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF CONTAINS[c] %@", searchString];
    return [self.RowArray filteredArrayUsingPredicate:predicate];

else 
    return self.RowArray;


return @[];



#pragma mark - UITableViewDataSource

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
return 1;


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
if (self.searchController.isActive && self.searchController.searchBar.text.length > 0) 
    return self.searchResults.count;

else 
    return self.RowArray.count;

return 0;


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
UITableViewCell *cell;
NSString *cityName = @"";
cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
if (self.searchController.isActive && (![self.searchController.searchBar.text isEqualToString:@""])) 
    cityName = [self.searchResults objectAtIndex:indexPath.row];

else 
    cityName = [self.RowArray objectAtIndex:indexPath.row];

cell.textLabel.text = cityName;

return cell;

Interface image 1 about outlet setting.

UISearchbar outlet setting.

Search Display Controller outlet setting.

【问题讨论】:

【参考方案1】:

我已经找到答案了。 我忽略了 updateSearchResultsForSearchController 代码。

- (void)updateSearchResultsForSearchController:(UISearchController *)searchController 
[self.tableView reloadData];

【讨论】:

以上是关于如何在 iOS 10 的目标 c 中使用 uisearchbar?的主要内容,如果未能解决你的问题,请参考以下文章

在我的表格视图中,我没有只有单元格的部分,所以如何在 ios 目标 c 中重新加载表格视图?

如何在 iOS 的目标 C 中使用 javascript 代码?

如何使用 AFNetworking 在 iOS 目标 c 中发出此帖子请求

如何在目标 c 中使用 XIB 在登录视图后创建滑出菜单

NSArray of doubles iOS(目标 c)

如何在IOS目标c中重复从数组开始数据到结束数据的数据并再次开始数据