Swift: действие кнопки в Custom CalloutView - PullRequest
0 голосов
/ 13 мая 2018

Я реализую настраиваемый calloutView на моем mapView и пытаюсь реализовать кнопки действий из настраиваемого calloutView. У меня возникают проблемы с поиском способов обнаружения нажатых кнопок относительно calloutViews.

Ниже моя реализация:

//At MapViewController
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
    if !annotation.isKind(of: Post.self) {
        return nil
    }

    var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: "pin") as? MKPinAnnotationView

    if annotationView == nil {
        annotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: "pin")
        annotationView?.canShowCallout = true
        annotationView?.animatesDrop = true
    } else {
        annotationView?.annotation = annotation
    }

    let postAnnotation = annotation as! Post
    let calloutView = DetailCalloutView()
    calloutView.titleLabel.text = ...
    calloutView.timestampLabel.text = ...
    calloutView.postContentTextView.text = ...
    calloutView.profileImageView.image = ...
    calloutView.deleteButton.addTarget(self, action: #selector(deleteButtonTap), for: .touchUpInside)
    calloutView.chatButton.addTarget(self, action: #selector(chatButtonTap), for: .touchUpInside)

    annotationView?.detailCalloutAccessoryView = calloutView

    return annotationView
}

@objc func deleteButtonTap(_ sender: MKAnnotationView) {
    let post = sender.annotation as? Post
    let index = postArray.index(of: post) //Is there a way to implement something like this here??
    ...
}

@objc func chatButtonTap() {
    print("123")

}

//At Post
class Post: NSObject, MKAnnotation {
    var coordinate: CLLocationCoordinate2D
    var post: String?
    //All other properties

    init(coordinate: CLLocationCoordinate2D, post: String, ...) {
        self.coordinate = coordinate
        self.post = post
        ...
    }
}

//At DetailCallOutView
class DetailCalloutView: UIView {

    let containerView: UIView = {
        ...
        return v
    }()

    //All other UI elements

    let chatButton: UIButton = {
        let b = UIButton()
        ...
        return b
    }()

    let deleteButton: UIButton = {
        let b = UIButton()
        ...
        return b
    }()

    override init(frame: CGRect) {
        super.init(frame: frame)

        setupViews()
    }

    func setupViews() {
        addSubview(containerView)
        //adding subviews for all UI elements
        containerView.addSubview(cButton)
        containerView.addSubview(dButton)

        //setting up constraints for all UI elements    
    }
}

Я могу обнаружить кнопки чата и удалить, но не могу получить сообщение относительно postArray или аннотации. Есть ли способ сделать это?

1 Ответ

0 голосов
/ 13 мая 2018

Первое действие относится к типу, к которому добавлена ​​цель, а это UIButton здесь

calloutView.deleteButton.tag = <#setToIndexOfArr#>

calloutView.deleteButton.addTarget(self, action: #selector(deleteButtonTap), for: .touchUpInside)

//

@objc func deleteButtonTap(_ sender: UIButton) { 

  let item = modelArr[sender.tag]  

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...