Передача переменной из UIButton в другую функцию - PullRequest
0 голосов
/ 12 февраля 2020

Как передать переменную «координаты» в функцию: didClickDetailDisclosure?


func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
        guard annotation is MKPointAnnotation else { return nil }
...

 let rightButton = UIButton(type: .detailDisclosure)
        let coordinates = annotation.coordinate
        rightButton.
        rightButton.addTarget(self, action: #selector(didClickDetailDisclosure(button:)), for: .touchUpInside)
                   annotationView?.rightCalloutAccessoryView = rightButton

@objc func didClickDetailDisclosure(button: UIButton) {

           performSegue(withIdentifier: "SegueAddFromMaps", sender: self)
}

Спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 12 февраля 2020

Если переменная, которую вы передаете, имеет тип Int, вы можете установить метку для кнопки.

rightButton.tag = variable

и получить к ней доступ в функции, такой как

@objc func didClickDetailDisclosure(button: UIButton) {
       let variable = button.tag
}
0 голосов
/ 12 февраля 2020

При отправке параметров через цель / действие с использованием функции @ obj C функция должна принимать определенную форму.

По сути, он должен отправить «Отправителя» или сам элемент в качестве параметра. В вашем случае это отправка кнопки в качестве параметра, потому что цель добавлена ​​к кнопке.

Поэтому, если вы хотите передать координаты в качестве параметра, вы можете создать собственный класс кнопки, в котором хранятся переменные Coordinates. и передайте эту пользовательскую кнопку с помощью метода didClickDetailDisclosure. Вы можете сделать свою правую кнопку настраиваемой кнопкой: Передача аргументов в селектор в Swift

class CustomButton : UIButton {

    var coordinate: CLLocationCoordinate2D?

    convenience init(coordinate: CLLocationCoordinate2D, object: Any) {
        self.init()
        self.coordinate = coordinate
    }
}

@objc func didClickDetailDisclosure(button: CustomButton) {

          let coordinate = button.coordinate
           performSegue(withIdentifier: "SegueAddFromMaps", sender: self)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...