0

我很难听从指示。我在 UIView 中有一个 UISearchBar。用户将搜索字符串输入到 UISearchBar 并单击搜索图标进行搜索。结果将显示在新窗口(UITableView)中。

我的搜索向我展示了这一点:

UISearchDisplayController 不能添加到 UIView,因为它不是从 UIView 继承的。您可以使用 IBOutlet 在界面构建器中添加 UISearchBar,然后以编程方式使用该 UISearchBar 创建 UISearchDisplayController。

只需在代码中执行,例如(假设视图控制器是 vc): [vc addSubview:mySearchDisplayController.searchBar]; // 注意 searchBar 是视图,mySearchDisplayController 只控制 searchBar 等。

还有这个:

只需让您的视图控制器实现 UISearchBarDelegate。在您的 xib 文件中,您需要做的就是将 UISearchBar 添加到您的视图并根据需要对其进行配置,为其创建一个出口(实际上是可选的,但有助于明确),并将委托出口分配给您的视图控制器。然后,为了响应搜索栏事件,根据需要实现 UISearchBarDelegate 协议方法。例如: - (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar { [self handleSearch:searchBar]; }

  • (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar { [self handleSearch:searchBar]; }

  • (void)handleSearch:(UISearchBar *)searchBar { NSLog(@"用户搜索 %@", searchBar.text); [searchBar resignFirstResponder]; // 如果你想让键盘消失 }

  • (void)searchBarCancelButtonClicked:(UISearchBar *) searchBar { NSLog(@"用户取消搜索"); [searchBar resignFirstResponder]; // 如果你想让键盘消失 }

我只是不明白!我应该将 mySearchController 添加到我的 UIView 吗?还是我的 UISearchBar?将它添加到我的 UIView 中,没有任何反应;将它添加到我的 UISearchBar 真的假发应用程序。我什至没有收到错误 - 它只是挂起。

然后是第二部分:委托。我应该把委托放在我的 UIView 中吗?还是在 UISearchDisplayController 中?不知道该往哪个方向走,到目前为止还没有任何效果。请帮忙。

在这一点上,我真正想要的只是让 handleSearch 方法得到执行。非常感谢您的任何帮助。

很困惑。

4

1 回答 1

0

这个想法是您在 Interface Builder 中创建一个搜索栏作为出口,然后使用以下代码创建 UISearchDisplayController:

self.searchDisplayController2 = [[UISearchDisplayController alloc] initWithSearchBar:self.searchBar contentsController:self];
self.searchDisplayController2.delegate = self;
self.searchDisplayController2.searchResultsDelegate = self;
self.searchDisplayController2.searchResultsDataSource = self;

此代码将在您的视图控制器中实现,例如在viewDidLoad. 您还必须在同一个 VC 中实现至少两个委托函数:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
于 2013-09-27T09:25:48.940 回答