【发布时间】:2015-01-27 20:54:22
【问题描述】:
我希望它完全像这样工作。 http://i.imgur.com/M1JigDY.png
我有一个带有左右栏按钮的导航栏。左栏按钮是搜索按钮。单击该按钮会将我带到此方法。
@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 = ""
}
}
有什么想法吗??
奖励:有没有办法根据手机动态调整搜索栏的大小?当我初始化它时,我说
var searchBar = UISearchBar(frame: CGRectMake(0, 0, 300, 20)) as UISearchBar
但这不是 iPhone 6 的正确值。
【问题讨论】:
标签: ios search swift mapkit uisearchdisplaycontroller