【发布时间】:2016-08-04 19:43:34
【问题描述】:
我目前正在尝试使用从 API 调用中检索到的动态数据通过 UITableView 实现搜索功能。
流程是这样的
- 按右栏按钮项(搜索功能)
- 搜索控制器呈现在表格视图上方。
- 用户在上面输入一些文本并按下搜索按钮
- 控制器根据用户的搜索执行 API 调用。
- 表格视图将填充结果。
我看过一些关于如何在 tableView 上实现搜索的示例,我认为我的不同,因为我手动呈现了搜索控制器。在按下搜索按钮之前它不会显示(与示例相反,当UISearch 添加到表头视图并且当用户点击搜索栏时触发搜索功能。)
所以基本上我有一些问题:
1.- 我的方法对 iOS 友好吗?也许我找不到关于我如何努力实现的资源,因为它不是。
2.- 如果为真,按下键盘上的搜索按钮后如何关闭搜索控制器?
3.- 如何区分键盘上的搜索按钮或搜索栏上的取消按钮触发的解雇?
到目前为止,这是我的代码:
extension MyTableViewController: UISearchResultsUpdating {
func updateSearchResultsForSearchController(searchController: UISearchController) {
}
}
class MyTableViewController: UITableViewController, UISearchControllerDelegate {
var searchController: UISearchController!
var data = [CoolData]()
override func viewDidLoad() {
super.viewDidLoad()
self.navigationItem.rightBarButtonItem = UIBarButtonItem(image: UIImage(named: "search"), style: .Plain, target: self, action: .SearchTapped)
}
func searchButtonTapped(sender: UIBarButtonItem) {
searchController = UISearchController(searchResultsController: nil)
definesPresentationContext = true
searchController.searchResultsUpdater = self
searchController.delegate = self
searchController.searchBar.translucent = false
searchController.searchBar.barTintColor = UIColor(hexString: BACConstants.color.Yellow)
searchController.searchBar.tintColor = UIColor(hexString: BACConstants.color.Black)
self.presentViewController(searchController, animated: true, completion: nil)
}
}
private extension Selector {
static let SearchTapped = #selector(InvolvedProcessesViewController.searchButtonTapped(_:))
}
【问题讨论】:
-
其实可以参考苹果提供的代码来实现。运行示例代码,它位于 Search -> Present Over Navigation Bar 部分下。这是链接:developer.apple.com/library/prerelease/content/samplecode/…
-
我已阅读此链接上的快速示例:developer.apple.com/library/prerelease/content/samplecode/… 它似乎解释了如何呈现搜索栏,但没有解释如何处理其事件。但至少现在我知道它对 iOS 友好,因为它在官方示例中。 :)
标签: ios swift uitableview search uisearchcontroller