我有一个实现 UISearchBarDelegate 的 UITableVIewController,视图嵌入在导航控制器中。
class FacilityTableViewController: UITableViewController, UISearchResultsUpdating, UISearchBarDelegate, AmenityFilterDelegate {
// MARK: - Public Variables
var targetFacilities = [Int]()
var searchController: UISearchController = UISearchController(searchResultsController: nil)
// MARK: - Private Variables
private var viewModel: FacilityTableViewModel!
private let parkGreenColor = UIColor(red: 73/255, green: 136/255, blue: 84/255, alpha: 1)
private var showEmptyMessage = false
// MARK: - View Lifecycle
/**
Setup view after loading
*/
override func viewDidLoad() {
super.viewDidLoad()
trackScreenView("Facility Table View")
if targetFacilities.isEmpty {
viewModel = FacilityTableViewModel()
} else {
viewModel = FacilityTableViewModel(facilityIds: targetFacilities)
}
// Seup search controller
searchController.searchResultsUpdater = self
searchController.dimsBackgroundDuringPresentation = false
searchController.hidesNavigationBarDuringPresentation = false
searchController.searchBar.frame = CGRectMake(self.searchController.searchBar.frame.origin.x, searchController.searchBar.frame.origin.y, searchController.searchBar.frame.size.width, 44)
searchController.searchBar.tintColor = UIColor.whiteColor()
searchController.searchBar.barTintColor = parkGreenColor
searchController.searchBar.translucent = false
self.definesPresentationContext = true
tableView.tableHeaderView = searchController.searchBar
}
我发现当我禁用导航栏的半透明属性时,搜索框会向下移动它的位置。
如果我设置,definesPresentationContext = false
则搜索栏不会向下移动,但是如果我在搜索框中输入文本并选择其中一个结果,则无法打开生成的模式窗口。我收到以下错误:
2015-03-17 15:06:56.101 VB ParkFinder[16368:2667719] Warning: Attempt to present <UINavigationController: 0x7fa2f9ced930> on <VB_ParkFinder.FacilityTableViewController: 0x7fa2f9c27ba0> which is already presenting (null)
下面是我的segue代码:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let navController = segue.destinationViewController as UINavigationController
if segue.identifier == "facilityDetailsSegue" {
let detailsViewController = navController.childViewControllers.last as FacilityDetailsViewController
if let indexPath = tableView.indexPathForSelectedRow() {
var facilityId: Int
if searchController.active {
facilityId = viewModel.idForSearchResultsAtIndexPath(indexPath)
} else {
facilityId = viewModel.idForFacilityAtIndexPath(indexPath)
}
detailsViewController.currentFacilityId = facilityId
}
} else if segue.identifier == "FilterPopover" {
let aftvc = navController.childViewControllers.last as AmenityFilterTableViewController
aftvc.delegate = self
}
}
我不知道该怎么做。我想关闭半透明的导航栏,并且我需要能够从搜索结果中启动模式窗口。关于如何做到这一点的任何想法?