需要像 UISearchDisplayController 一样使用没有 UITableViewController 的 UISearchController

Posted

技术标签:

【中文标题】需要像 UISearchDisplayController 一样使用没有 UITableViewController 的 UISearchController【英文标题】:Need to use UISearchController without UITableViewController like a UISearchDisplayController 【发布时间】:2017-10-05 05:35:32 【问题描述】:

所以场景是我在 mapView 上实现了一个搜索栏。所以我的课不是 UITableViewController。以前它使用的是searchDisplayController,但由于它已被贬值,我想避免使用它。搜索显示控制器使用 UITableViewDataSource 来操作表格行等。

我在搜索时还能让行显示在顶部吗?我可以为 UISearchController 找到的教程正在使用 UITableView。我希望表格行只是为了向我显示我的搜索结果并在我选择一行时消失,并且搜索栏也应该辞职。

谁能指引我正确的方向?

编辑:我目前正在使用由故事板制作的搜索栏

【问题讨论】:

【参考方案1】:

通过使用 UISearchBar 委托,您可以完成您的任务。

Step1:从显示对象库中将 UISearchBar 添加到您的视图中。

/Users/rajesh/Desktop/Scr​​een Shot 2017-10-05 at 11.17.14 AM.png

第 2 步:将 UISearchBar 插座添加到您的视图控制器类。

@IBOutlet weak var searchbar: UISearchBar!

第 3 步:将 UISearchBar 委托与您的视图控制器类一致。

    `searchbar.delegate = self`

第 4 步:使用所有 UISearchbar 委托方法,您将完成您的场景。

@available(ios 2.0, *) optional public func searchBarShouldBeginEditing(_ searchBar: UISearchBar) -> Bool // 返回 NO 不成为第一响应者

@available(iOS 2.0, *)
optional public func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) // called when text starts editing

@available(iOS 2.0, *)
optional public func searchBarShouldEndEditing(_ searchBar: UISearchBar) -> Bool // return NO to not resign first responder

@available(iOS 2.0, *)
optional public func searchBarTextDidEndEditing(_ searchBar: UISearchBar) // called when text ends editing

@available(iOS 2.0, *)
optional public func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) // called when text changes (including clear)

@available(iOS 3.0, *)
optional public func searchBar(_ searchBar: UISearchBar, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool // called before text changes


@available(iOS 2.0, *)
optional public func searchBarSearchButtonClicked(_ searchBar: UISearchBar) // called when keyboard search button pressed

@available(iOS 2.0, *)
optional public func searchBarBookmarkButtonClicked(_ searchBar: UISearchBar) // called when bookmark button pressed

@available(iOS 2.0, *)
optional public func searchBarCancelButtonClicked(_ searchBar: UISearchBar) // called when cancel button pressed

@available(iOS 3.2, *)
optional public func searchBarResultsListButtonClicked(_ searchBar: UISearchBar) // called when search results button pressed


@available(iOS 3.0, *)
optional public func searchBar(_ searchBar: UISearchBar, selectedScopeButtonIndexDidChange selectedScope: Int)

【讨论】:

感谢您的回复。我已经可以使用 UISearchBar 委托方法了。我面临的问题是 UISearchController 没有像 UISearchDisplayController 那样的搜索显示。所以我需要能够将它与一张桌子连接起来。所以我能想到的解决方案的方向是以某种方式在搜索栏成为第一响应者时出现一个表格视图。我需要帮助 @TaimoorAbdullahKhan 你最后是怎么解决的?我遇到了同样的问题:/【参考方案2】:

如果您需要像列表这样的设计,最好的选择是表格视图。您可以在搜索栏下方添加一个表格视图,最初隐藏它,然后在用户选择搜索栏进行搜索时显示它。 我附上了storyBoard的截图,这里是处理tableview的隐藏和取消隐藏的代码

代码如下:

func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) 
    tableViewForSearch.isHidden = false


func searchBarCancelButtonClicked(_ searchBar: UISearchBar) 
    tableViewForSearch.isHidden = true

这些是 searchBar 代表,它们非常具有描述性。不要忘记将 searchBar 委托设置为 self。 希望这会有所帮助

【讨论】:

感谢您的回复。经过大量的修补,我同意你的看法,这也是正确的方向,但我仍然在努力解决如何在视图(包含地图视图)之上手动管理 tableview 并让它只出现在搜索栏成为第一响应者并在它不是时消失 好的,如果我附上情节提要图像以及相应的代码以在激活 searchBar 时隐藏 tableview 会有帮助吗?过段时间会更新答案 好的,非常感谢! 更新了我的答案。检查@TaimoorAbdullahKhan 谢谢,我试试看!

以上是关于需要像 UISearchDisplayController 一样使用没有 UITableViewController 的 UISearchController的主要内容,如果未能解决你的问题,请参考以下文章

需要像 UISearchDisplayController 一样使用没有 UITableViewController 的 UISearchController

为啥我们需要像 Lua 这样的嵌入式编程语言?

Android:我需要做一个像图像一样的菜单

像应用程序一样构建 Visual Studio,需要输入

像 keyup/down 这样的事件监听器是不是需要在 java 中处理?

像 Python 这样易于学习的语言,但需要变量声明?