我想添加一个搜索栏(就像在Google Maps App for iOS中一样)。
所以看起来和那个App一样,生成了一个UITextField。
例如:
override func viewDidLoad() {
/* Add Google Map */
let camera = GMSCameraPosition.cameraWithLatitude(49.077872,longitude: 19.450339, zoom: 17)
mapView = GMSMapView.mapWithFrame(CGRectZero, camera: camera)
self.view = mapView
mapView.delegate = self
mapView.indoorDisplay.delegate = self
mapView.myLocationEnabled = true
mapView.settings.myLocationButton = true
mapView.padding = UIEdgeInsetsMake(64, 0, 64, 0)
mapView.setMinZoom(15, maxZoom: 19)
// add Searchbar
let screenWidth = UIScreen.mainScreen().bounds.width
searchTextField = UITextField(frame: CGRectMake(16, 50, screenWidth - 32, 40))
searchTextField.delegate = self
searchTextField.placeholder = "Gebäude und Räume suchen"
searchTextField.backgroundColor = UIColor.whiteColor()
searchTextField.clearButtonMode = UITextFieldViewMode.WhileEditing
searchTextField.layer.borderWidth = 1
searchTextField.layer.borderColor = UIColor.customGrey().CGColor
searchTextField.font = UIFont.systemFontOfSize(16.0)
let showCategories = UIButton(type: .Custom)
showCategories.frame = CGRectMake(0, 0, 40, 40)
showCategories.setTitle(String.fontAwesomeIconWithCode("fa-calendar-plus-o"), forState: .Normal)
showCategories.setTitleColor(UIColor.customDarkGrey(), forState: .Normal)
showCategories.titleLabel?.font = UIFont.fontAwesomeOfSize(20)
showCategories.addTarget(self,action: "calendarAddButtonPressed",forControlEvents: UIControlEvents.TouchUpInside)
searchTextField.rightView = showCategories
searchTextField.rightViewMode = .Always
searchTextField.userInteractionEnabled = true
self.mapView.addSubview(searchTextField)
Button工作正常,但我无法专注于TextField。
生病时设置(在ViewDidLoad中)。
searchTextField.becomesFirstResponder()
键盘在那里。
也是那个事件:
func textFieldDidBeginEditing(textField: UITextField) {
print("start searching")
self.becomeFirstResponder()
}
没有火。
有什么想法吗?当SubView不在顶层时 - 按钮也不应该工作,或者?
答案 0 :(得分:6)
接受的答案对我来说根本没有帮助,但事实证明那里的another question 与SO类似,但与目标C相似。
默认情况下,所有sudo apt-get purge python-minimal
都有GMSMapView
,这就是为什么你的textField没有按照你想要的方式工作的原因。解决方案是删除它,因此您可以将其放在GMSBlockingGestureRecognizer
方法中:
Swift 3
viewDidLoad()
或者,如果您由于某种原因向mapView添加了其他手势识别器,则可以执行以下操作:
for gesture in mapView.gestureRecognizers! {
mapView.removeGestureRecognizer(gesture)
}
由于默认情况下会添加for (index,gesture) in mapView.gestureRecognizers!.enumerated() {
if index == 0 {
mapView.removeGestureRecognizer(gesture)
}
}
,因此它将始终是手势识别器数组中的第一个。
此外,确保你将for循环放在某个地方只调用一次,因为如果多次调用它,你可能会无意中删除其他手势。
答案 1 :(得分:1)
Ok ill为那些正在努力解决同样问题的人找到了解决方案。
设置时:
self.view = mapView
看起来您无法设置任何子视图,因为该视图永远不会接收触摸事件。
所以在那种情况下使用:
mapView = GMSMapView.mapWithFrame(self.view.bounds, camera: camera)
self.view.addSubview(mapView)
然后所有SubView都可以正常工作。