Objective-c updateSearchResultsForSearchController 未被调用
Objective-c updateSearchResultsForSearchController not getting called
我正在尝试将搜索功能应用于我的 UITableView。我在故事板场景中添加了一个搜索栏,如下所示:
然后在我的头文件中,我添加了 UISearchControllerDelegate 和 UISearchController,如下所示:
@interface LHFileBrowser : UITableViewController UISearchControllerDelegate>
@property(nonatomic, retain) NSArray * tableData;
@property (strong, nonatomic) IBOutlet UINavigationBar *NavBar;
@property (strong, nonatomic) NSArray *results;
@property (strong, nonatomic) UISearchController *controller;
@end
并且我将 updateSearchResultsForSearchController 方法添加到 .m 文件
- (void)updateSearchResultsForSearchController:(UISearchController *)searchController {
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name contains [c] %@", self.controller.searchBar.text];
self.results = [self.tableData filteredArrayUsingPredicate:predicate];
}
我在 NSPredicate 上设置了一个断点,当我尝试使用我的搜索栏时,我什么也没得到,它没有达到我的断点,所以没有调用 updateSearchResultsForSearchController。有什么我想念的吗?
您需要将 TableViewController 设置为许多事情的委托,因此在 viewDidLoad
中添加:
self.controller.searchResultsUpdater = self;
self.controller.delegate = self;
self.controller.searchBar.delegate = self;
你的界面也有错字,UISearchControllerDelegate
前应该有一个<
。
(顺便说一句,我建议更改 controller
-> searchController
以使您的代码不那么混乱。)
我正在尝试将搜索功能应用于我的 UITableView。我在故事板场景中添加了一个搜索栏,如下所示:
然后在我的头文件中,我添加了 UISearchControllerDelegate 和 UISearchController,如下所示:
@interface LHFileBrowser : UITableViewController UISearchControllerDelegate>
@property(nonatomic, retain) NSArray * tableData;
@property (strong, nonatomic) IBOutlet UINavigationBar *NavBar;
@property (strong, nonatomic) NSArray *results;
@property (strong, nonatomic) UISearchController *controller;
@end
并且我将 updateSearchResultsForSearchController 方法添加到 .m 文件
- (void)updateSearchResultsForSearchController:(UISearchController *)searchController {
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name contains [c] %@", self.controller.searchBar.text];
self.results = [self.tableData filteredArrayUsingPredicate:predicate];
}
我在 NSPredicate 上设置了一个断点,当我尝试使用我的搜索栏时,我什么也没得到,它没有达到我的断点,所以没有调用 updateSearchResultsForSearchController。有什么我想念的吗?
您需要将 TableViewController 设置为许多事情的委托,因此在 viewDidLoad
中添加:
self.controller.searchResultsUpdater = self;
self.controller.delegate = self;
self.controller.searchBar.delegate = self;
你的界面也有错字,UISearchControllerDelegate
前应该有一个<
。
(顺便说一句,我建议更改 controller
-> searchController
以使您的代码不那么混乱。)