Я бы предложил использовать здесь UITableView вместо списка кнопок.Но если вам нужно использовать список кнопок, это должно работать:
Просто создайте подкласс UIButton и добавьте свойство location к его инициализатору.
class LocationButton: UIButton {
public var location : Location
init(location: Location, frame: CGRect) {
self.location = location
super.init(frame: frame)
setProperties()
}
///needed for interface builder
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
private func setProperties() {
//Set properties of button here...
setTitle("Button Title", for: .normal)
}
}
Создание LocationButton будетвыглядит примерно так:
let locationButton = LocationButton(location: Location(title: "LaFarge Hall", location: CLLocation(), frame: CGRect())
Обязательно добавьте цель к каждой кнопке в массиве:
locationButton.addTarget(self, action: #selector(tapDidNavi(_:)), for: .touchUpInside)
Обновите функцию tapDidNavi (), чтобы она принимала тип LocationButton.Затем вы сможете захватить местоположение с любой нажатой кнопки и передать его следующему viewController следующим образом:
@IBAction func tapDidNavi(sender: LocationButton) {
let nextViewController = SomeViewController() //This viewController must have a 'public var Location' inside of it.
nextViewController.location = sender.location //The location object you set on the button
self.navigationController?.pushViewController(nextViewController, animated: true)
}