Кнопка в представлении выноски по умолчанию перестает реагировать на прикосновения - PullRequest
0 голосов
/ 19 марта 2019

Итак, у меня есть карта с тоннами аннотаций. У каждой аннотации есть вид выноски по умолчанию, прикрепленный к созданной мной кнопке, которая предположительно переносит пользователя в другой контроллер вида. Сначала эта кнопка работает нормально, но для некоторых аннотаций она не регистрирует касания, пока я не увеличу масштаб аннотации или снова не нажму аннотацию. Я очень потерян. Вот мой код.

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
        var annotationView = MKAnnotationView()
        guard let annotation = annotation as? LocationAnnotation else {return nil}
        var identifier = ""
        switch annotation.type {
        case .nightclub:
            identifier = "Nightclub"
        case .hookahLounge:
            identifier = "Hookah Lounge"
        case  .bar:
            identifier = "Bar"
        case .bowling:
            identifier = "Bowling Alley"
        case .arcade:
            identifier = "Arcade"
        case .pool:
            identifier = "Pool"
        }
        if let dequedView = mapSF.dequeueReusableAnnotationView(withIdentifier: identifier) {
            annotationView = dequedView
        } else {
            annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: identifier)
        }
        annotationView.canShowCallout = true
        annotationView.isEnabled = true
        let button = UIButton()
        button.frame = CGRect(x: 0.0, y: 0.0, width: 30.0, height: 30.0)
        let image = UIImage(named: "go")
        button.setImage(image, for: .normal)
        annotationView.detailCalloutAccessoryView?.backgroundColor = UIColor.darkGray
        annotationView.rightCalloutAccessoryView = button
}

А вот вспомогательная функция выноски, которая изначально работает, но не работает в случайное время.

      func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) {
             print("true button tapped")
    }

Опять же, моя проблема в том, что оператор print не выполняется для различных аннотаций. Моя консоль будет выводить это утверждение каждый раз, когда я нажимаю кнопку в выноске, но в некоторых других случаях это не так. Я понятия не имею, почему. Буду признателен за любую помощь, так как это одна из моих последних ошибок моего приложения.

1 Ответ

1 голос
/ 03 мая 2019

Это несколько устарело для меня, но я ДЕЙСТВИТЕЛЬНО нашел решение.Чтобы получать прикосновения к кнопке в моей выноске, мне нужно было просто добавить одну строку annotationView.isUserInteractionEnabled = false.И мое изображение в моей кнопке выноски было интерактивным независимо от того, была ли карта постоянно увеличена или нет.Какой странный сценарий, но он работает плавно.

...