我使用 UISPlitViewController 以便在屏幕上显示分类数据。我在主视图控制器上实现了一种搜索方法,iPhone屏幕上的数据流很好,但在iPad,纵向和横向上,它确实可以正常工作。
我创建了一个segue(黑色箭头指向它)到细节控制器,但它将数据加载到主视图控制器中。
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "showDetail" {
if let indexPath = self.tableView.indexPathForSelectedRow {
let object = categoryID[indexPath.row]
let controller = (segue.destination as! UINavigationController).topViewController as! DetailTableViewController
controller.detailItem = object as Int?
controller.navigationItem.leftBarButtonItem = self.splitViewController?.displayModeButtonItem
controller.navigationItem.leftItemsSupplementBackButton = true
}
//this is the problem!
}else if segue.identifier == "showSearchDetail" {
if let indexPath = self.tableView.indexPathForSelectedRow {
let object = searchResultDrugsID[indexPath.row]
let controller = (segue.destination as! UINavigationController).topViewController as! DrugDetailsTableViewController
controller.detailItem = object as Int?
controller.navigationItem.leftBarButtonItem = self.splitViewController?.displayModeButtonItem
controller.navigationItem.leftItemsSupplementBackButton = true
}
}
}
答案 0 :(得分:2)
从故事板屏幕截图中,我只能假设您可能不正确地混合和匹配detail
视图控制器。具体来说,带有黑色箭头的那个不应该在那里。
您可能不需要(也不应该)"showDetail"
和"showSearchDetail"
:搜索只是缩小了主视图中可用内容的范围,这是预期的用户体验。
关于该主题的优秀资源是来自raywenderlich.com的Candy Search,其中有一个很好的示例和教程。
从Xcode创建默认的Master-Detail项目产生了这种结构:
要为其添加UISearchController
,请在主UITableViewController
中以编程方式构建它:
let searchController = UISearchController(searchResultsController: nil)
searchController.searchResultsUpdater = self
searchController.dimsBackgroundDuringPresentation = false
tableView.tableHeaderView = searchController.searchBar
definesPresentationContext = true
并过滤UISearchResultsUpdating
委托的结果:
extension MasterViewController: UISearchResultsUpdating {
func updateSearchResults(for searchController: UISearchController) {
filter(searchController.searchBar.text!)
}
}
func filter(_ searchText: String) {
// Your filter goes here
tableView.reloadData()
}
此外,详细信息segues应“显示详细信息”