Я использую Google Map в своем проекте. Я хочу дать пользователю 2 опции при нажатии на infoWindowOfMarker, который вызывает метод делегата: mapView(_ mapView: GMSMapView, didTapInfoWindowOfMarker marker: GMSMarker)
, если я хочу выполнить только одно действие, я мог бы просто получить информацию в маркере и просто выполнить свое действие. На самом деле я хочу дать пользователю 2 варианта: см. Подробно (которое отправит пользователя новому контроллеру представления) и Визит (который получит указания из базы данных API Google в зависимости от положения маркера и текущего местоположения пользователя): 2 варианта будут две кнопки.
Я не понимаю, как передать параметр маркера методу, вызываемому при нажатии кнопки.
Посмотрите код и, пожалуйста, дайте мне знать, как я могу это сделать.
class ItemMarker: GMSMarker {
let item: Item
init(item: Item){
self.item = item
super.init(position: item.coordinate)
//and necessary initialization
}}
class MapViewController: GMSMapViewDelegate{
@IBOutlet weak var actionStackView: UIStackView!
@IBoutlet weak var mapView: GMSMapView!
var currentUser: User!
var users = [User]()
var items = [Item]()
override viewDidLoad(){
super.viewDidLoad()
//implement code for mapView
self.currentUser = UserManager.shared.currentUser
self.users = UserManager.shared.users
users.forEach {self.items.append(contentOf: $0.items}
self.items.forEach {let marker = ItemMarker(item: $0)
marker.map = mapView}
}
@objc func seeDetailButtonTapped(_ sender: UIButton){
//here I want to verify if the user is the owner of the item he wants to see the detail,
//then allow him to modify it and present the new view controller modally.
//if the user is not the owner, then not allowing editing, and show the new view controller.
//i guess for that I need to be able to have the marker for that.
}
@objc func visitButtonTapped(_ sender: UIButton) {
//here I want to use the user current location,
//the item location, get the directions for the user,
//I need the ItemMarker to do that.
}
func mapView(_ mapView: GMSMapView, didtapInfoWindowOfMarker marker: GMSMarker)
{
let visitButton = UIButton(type: .roundedRect)
visitButton.setTitle(Utilities.visit, for: .normal)
visitButton.backgroundColor = UIColor.systemBlue
visitButton.addTarget(self, action: #selector(visitButtonTapped(_:)), for: .touchUpInside)
let seeDetail = UIButton(type: .roundedRect)
seeDetail.setTitle(Utilities.detail, for: .normal)
seeDetail.backgroundColor = UIColor.systemGray
seeDetail.addTarget(self, action: #selector(showDetailHouse(_:)), for: .touchUpInside)
actionStackView.addArrangedSubview(visitButton)
actionStackView.addArrangedSubview(seeDetail)
let stackViewHeight = actionStackView.intrinsicContentSize.height
let topInset = self.mapView.safeAreaInsets.top
mapView.padding = UIEdgeInsets(top: topInset, left: 0.0, bottom: stackViewHeight, right: 0.0)
UIView.animate(withDuration: 0.25) {
actionStackView.bottomAnchor.constraint(equalTo: self.mapView.safeAreaLayoutGuide.bottomAnchor, constant: 2.0).isActive = true
actionStackView.alpha = 0.9 }
}
}
Как передать маркер методу seeDetail и методу visitButtonTapped? ?