UIView 中的 UISearchBar

Posted

技术标签:

【中文标题】UIView 中的 UISearchBar【英文标题】:UISearchBar in UIView 【发布时间】:2012-11-12 18:36:42 【问题描述】:

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

我的搜索显示了这个:

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

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

还有这个:

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

(void)searchBarTextDidEndEditing:(UISearchBar *)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 方法得到执行。非常感谢您的任何帮助。

很困惑。

【问题讨论】:

你需要一个uisearchdisplaycontroller吗?还是你只想要一个 UISearchBar? 不确定是否需要 uisearchdisplaycontroller。我的 xib 中有一个 uiviewcontroller 和一个 uisearchbar。我只是想获得一种在用户按下搜索图标时触发的方法。谢谢。 K. UISearchDisplayController 有它自己的表格视图,可以显示结果。因此,当您用手指按下搜索栏时,它会显示一个取消按钮,占据更多屏​​幕,并显示一个显示“无结果”的空白表格视图。如果您只是想要一个 UISearchBar,那么只需使用一个 uisearchbar 并在按下搜索按钮时观察它的委托方法。 【参考方案1】:

想法是你在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;

【讨论】:

以上是关于UIView 中的 UISearchBar的主要内容,如果未能解决你的问题,请参考以下文章

UIView 中的 UIView 问题

检测一个 UIView 是不是在父级中的另一个 UIView 后面

使 UIVIew 看起来像 IB 中的 UIView 的最佳方法?

在 Objective C 中的 UIView 中的命中测试

如何获取嵌套在 UIView 中的 UIView 框架 - Objective C

不同uiview中的iOS MultiTouch事件