无法单击GMaps for iOS Subview上的Textfield

时间:2016-03-09 10:02:46

标签: ios swift

我想添加一个搜索栏(就像在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不在顶层时 - 按钮也不应该工作,或者?

2 个答案:

答案 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都可以正常工作。