Я хочу, чтобы он работал именно так. http://i.imgur.com/M1JigDY.pngUISearchDisplayController in Swift
У меня есть панель навигации с левой и правой панелью. Левая панель - кнопка поиска. Нажатие этой кнопки приводит меня к этому методу.
@IBAction func searchMap(sender: AnyObject) {
self.navigationItem.rightBarButtonItem = nil
var searchDispCont = UISearchDisplayController(searchBar: searchBar, contentsController: nil)
self.navigationController?.navigationBar.addSubview(searchDispCont.searchBar)
searchDispCont.searchBar.showsCancelButton = true
searchDispCont.searchBar.tintColor = UIColor.lightGrayColor()
searchDispCont.displaysSearchBarInNavigationBar = true
searchDispCont.searchBar.becomeFirstResponder()
searchDispCont.setActive(true, animated: true)
}
Когда нажата кнопка отмены строки поиска, она возвращается к исходному навигационному контроллеру.
func searchBarCancelButtonClicked(searchBar: UISearchBar) {
// Need to go back to original state
searchBar.hidden = true
var listBtn = UIBarButtonItem(title: "List", style: UIBarButtonItemStyle.Plain, target: self, action: "goToList:")
self.navigationItem.setRightBarButtonItem(listBtn, animated: false)
var searchBtn = UIBarButtonItem(barButtonSystemItem: .Search, target: self, action: "searchMap:")
self.navigationItem.setLeftBarButtonItem(searchBtn, animated: false)
}
Кнопка списка работает правильно. Однако нажатие кнопки поиска снова не возвращает меня к методу searchMap(), как должно. Он удаляет левую навигационную панель, не показывает ли панель поиска. Это потому, что я уже создал searchDisplayController?
У меня также такая же проблема после того, как я искал карту. После того, как я искал карту, панель поиска исчезает, как и должна, но у меня такая же проблема, когда я снова нажимаю кнопку поиска. Вот этот метод.
func searchBarSearchButtonClicked(searchBar: UISearchBar!)
{
var listBtn = UIBarButtonItem(title: "List", style: UIBarButtonItemStyle.Plain, target: self, action: "goToList:")
self.navigationItem.setRightBarButtonItem(listBtn, animated: false)
var searchBtn = UIBarButtonItem(barButtonSystemItem: .Search, target: self, action: "searchMap:")
self.navigationItem.setLeftBarButtonItem(searchBtn, animated: false)
searchBar.resignFirstResponder()
var found = false
for bar in bars {
var barName = bar.name.stringByReplacingOccurrencesOfString("\'", withString: "", options: NSStringCompareOptions.LiteralSearch, range: nil)
var searchString = searchBar.text.stringByReplacingOccurrencesOfString("\'", withString: "", options: NSStringCompareOptions.LiteralSearch, range: nil)
var test = bar as BarAnnotation
if barName.rangeOfString(searchString) != nil || barName.lowercaseString.rangeOfString(searchString.lowercaseString) != nil {
found = true
var span = MKCoordinateSpanMake(0.005, 0.005)
var region = MKCoordinateRegion(center: test.location, span: span)
mapView.setRegion(region, animated: true)
mapView.selectAnnotation(bar.annotation, animated: true)
}
}
if found {
// Need to go back to original state
searchBar.hidden = true
searchBar.text = ""
}
else{
let alert = UIAlertView()
alert.title = "Not Found"
alert.message = "Not found. Please try your search again."
alert.addButtonWithTitle("OK")
alert.show()
searchBar.text = ""
}
}
Любые идеи?
BONUS: Есть ли способ динамически изменять размер панели поиска в зависимости от телефона? Когда я инициализируюсь его, я сказал
var searchBar = UISearchBar(frame: CGRectMake(0, 0, 300, 20)) as UISearchBar
Но это не будет правильные значениями для iPhone 6.
Привет @leerob Я реализовал то же самое, но когда я нажимаю кнопку отмены, он не вызывает метод searchBarCancelButtonClicked. В строке поиска результатов не скрывается кнопка отмены нажатия. – Daljeet
@Daljeet Я считаю, что вам нужно настроить делегат поиска в любом классе, в котором вы работаете, чтобы он мог распознать, когда нажата кнопка отмены. – leerob
Я уже добавил делегатов UISearchControllerDelegate, UISearchBarDelegate. – Daljeet