Приложение на основе местоположения с использованием скользящего меню гамбургера с кнопками, которые будут фильтровать карту (iOS MapKit) результаты поиска Xcode - PullRequest
0 голосов
/ 14 ноября 2018

Я использую MapKit на Xcode, чтобы создать приложение для определения местоположения ближайшей больницы, психиатрического центра или центра обработки вызовов.Я хочу, чтобы пользователь мог фильтровать результаты карты.Например, если я ищу больницы, я хочу, чтобы только местоположения больниц отображались на карте.До сих пор для этого я создал скользящее меню для гамбургеров с кнопками, похожими на флажки, для использования в качестве фильтров.Например, вы нажимаете кнопку меню гамбургера и ставите флажок с больницами, чтобы на карте отображались только результаты больниц.Тем не менее, я, должно быть, как-то испортил это, потому что когда я попадаю в MapViewController, появляется только черный экран.Посоветуйте, пожалуйста, как я могу это исправить или, возможно, использовать другой метод полностью для достижения той же цели.

import UIKit
import MapKit

class MapViewController: NSObject, CLLocationManagerDelegate {


@IBOutlet weak var mapView: MKMapView!

@IBOutlet weak var trailingMap: NSLayoutConstraint!

@IBOutlet weak var leadingMap: NSLayoutConstraint!

func viewDidLoad() {
    mapView.delegate = self as? MKMapViewDelegate
    let locationManager = CLLocationManager()
    let regionRadius:CLLocationDistance = 1000
    locationManager.requestWhenInUseAuthorization()
    mapView.showsUserLocation = true
    locationManager.startUpdatingLocation()
}

var hamburgerMenuIsVisible = false

@IBAction func hamburgerMenu(_ sender: Any) {
    if hamburgerMenuIsVisible {
        leadingMap.constant = 150
        trailingMap.constant = -150

        hamburgerMenuIsVisible = true
    } else {
        leadingMap.constant = 0
        trailingMap.constant = 0

        hamburgerMenuIsVisible = false
    }
}


var mapItems: [MKMapItem] = []
var place = MKLocalSearch.Request()              //user's facility search options
var naturalLanguageQuery: String? {
    place.naturalLanguageQuery = "hospital"
    let place2 = MKLocalSearch.Request()
    place2.naturalLanguageQuery = "Mental Health Facility"
    let place3 = MKLocalSearch.Request()
    place3.naturalLanguageQuery = "Women's Center"
    let place4 = MKLocalSearch.Request()
    place4.naturalLanguageQuery = "Call Center"

    place.region = self.mapView.region
    place2.region = self.mapView.region
    place3.region = self.mapView.region
    place4.region = self.mapView.region

    return place.naturalLanguageQuery

} 


@IBAction func hospitalButton(_ sender: Any) {
    print(mapItems)
}


@IBAction func callCenterButton(_ sender: Any) {
    print(mapItems)
}

}

1 Ответ

0 голосов
/ 14 ноября 2018

Ваш ViewController является подклассом UIViewController, поэтому вы должны использовать наследование от UIViewController вместо NSObject

Итак, замените это

class MapViewController: NSObject, CLLocationManagerDelegate {

с этим

class MapViewController: UIViewController, CLLocationManagerDelegate {

также исправьте ваш метод viewDidLoad, добавив ключевое слово override перед ключевым словом func вашей функции viewDidLoad. Это потому, что вы переопределяете функцию из UIViewController. Вам нужно будет вызвать super.viewDidLoad() в начале этой функции. Поэтому viewDidLoad должен выглядеть следующим образом

override func viewDidLoad() {

    super.viewDidLoad()

    mapView.delegate = self as? MKMapViewDelegate
    let locationManager = CLLocationManager()
    let regionRadius:CLLocationDistance = 1000
    locationManager.requestWhenInUseAuthorization()
    mapView.showsUserLocation = true
    locationManager.startUpdatingLocation()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...