Передать данные широты и долготы на карту Google из другого View Controller - Swift - PullRequest
0 голосов
/ 31 октября 2019

Я использую два контроллера представления, с плавающей панелью библиотеки GitHub. https://github.com/SCENEE/FloatingPanel

1) MapViewController. 2) DataViewController.

MapViewController содержит только методы Google Map и Google Map.

DataViewController содержит представление таблицы, модель данных и источник данных.

В MapViewController я использую плавающую панель, которая содержит DataViewController (tableView).

  • Проблема: как пройтиДанные широты и долготы в MapViewController для отображения на карте Google. Пожалуйста, предложите.

Обновлено с кодом:

DataViewController:

func loadFriend(withUid: String) {

        let dataLatitude = aFriend.latitude
        let dataLongtitude = aFriend.longitude
            self.delegate?.sendDataToFirstViewController(mapLat: dataLatitude, mapLong: dataLongtitude)


        self.tableView.reloadData()

        })
    }

Делегирование DataViewController:

protocol MyDataSendingDelegateProtocol {
    func sendDataToFirstViewController(mapLat: Double, mapLong: Double)
}

Класс DataViewController:

var delegate: MyDataSendingDelegateProtocol? = nil

MapViewController:

class MapViewController: UIViewController, CLLocationManagerDelegate, FloatingPanelControllerDelegate, MyDataSendingDelegateProtocol {

Делегирование вызова на MapViewController:

func sendDataToFirstViewController(mapLat: Double, mapLong: Double) {
        print(mapLat)
        print(mapLong)
    }

Ответы [ 3 ]

1 голос
/ 31 октября 2019

Вы можете использовать обратный вызов из DataViewController в MapViewController, после получения вызова затем обновить представление в MapViewController

0 голосов
/ 31 октября 2019

Когда вы переходите от MapViewController к DataViewController, вам нужно установить делегата, путем перехода или создания экземпляра vc и установки его делегата на self.

затем в DataViewController хранится слабый экземпляр DataViewControllerDelegate, а когда вы хотите запустить метод делегата ... просто вызовите их, используя этот экземпляр

, например:

protocol DataViewControllerDelegate: class {
 func doSomething()
}

class DataViewController: UIViewController {
weak var delegate: DataViewControllerDelegate?

func someOfYourOwnFunction() {

  //trigger the delegate method
  delegate?.doSomething()
}
}
0 голосов
/ 31 октября 2019

Отвечая на ваш запрос из комментария:

Делегирование подход


protocol DataViewControllerDelegate: class {
    func dataViewController(_ dataViewController: DataViewController, coordicatesDidChange coordiates: CLLocationCoordinate2D)
}

class DataViewController: UITableViewController {

    weak var delegate: DataViewControllerDelegate?

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        let coordiatesForRow = CLLocationCoordinate2D(latitude: 12.11515, longitude: 52.124124)

        self.delegate?.dataViewController(self, coordicatesDidChange: coordiatesForRow)
    }

    // ...
}


class MapViewController: UIViewController {

    let dataViewController = DataViewController()

    override func viewDidLoad() {
        super.viewDidLoad()
        self.dataViewController.delegate = self
    }

    // ...
}

extension MapViewController: DataViewControllerDelegate {
    func dataViewController(_ dataViewController: DataViewController, coordicatesDidChange coordiates: CLLocationCoordinate2D) {
        print("New latitude: \(coordiates.latitude), longitude: \(coordiates.longitude)")
    }
}


Закрытие / Блочный подход


class DataViewController: UITableViewController {

    var onCoordinatesChange: ((CLLocationCoordinate2D) -> Void)?

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        let coordiatesForRow = CLLocationCoordinate2D(latitude: 12.11515, longitude: 52.124124)

        self.onCoordinatesChange?(coordiatesForRow)
    }

    // ...
}


class MapViewController: UIViewController {

    let dataViewController = DataViewController()

    override func viewDidLoad() {
        super.viewDidLoad()
        self.dataViewController.onCoordinatesChange = { (coordiates) in
            print("New latitude: \(coordiates.latitude), longitude: \(coordiates.longitude)")
        }
    }

    // ...
}

...