将变量从 UIButton 传递到另一个函数



如何将"坐标"变量传递给函数: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)
}

感谢您的帮助!

当使用 @objC 函数通过目标/操作发送参数时,该函数必须采用某种形式。

基本上,它必须发送"发件人"或项目本身作为参数。 在您的情况下,它将按钮作为参数发送,因为目标已添加到按钮中。

因此,如果要将坐标作为参数传递,可以创建一个存储坐标变量的自定义按钮类,并通过didClickDetailDisclosure方法传递该自定义按钮。 你可以将 rightButton 设为自定义按钮:在 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)
}

如果您要传递的变量是Int类型,则可以在按钮上设置标记。

rightButton.tag = variable

您可以在功能中访问它,例如

@objc func didClickDetailDisclosure(button: UIButton) {
let variable = button.tag
}

最新更新