Функция Swift/iOS MapKit на кране MKAnnotation

У меня есть карта, и я отлично добавил к ней 12 аннотаций, и мне бы хотелось, чтобы, когда кто-то нажимает на эти аннотации, у нее была информационная кнопка справа от аннотации, которая при нажатии показывала бы направления к аннотации в приложение карты. Я написал функцию для открытия приложения карт с нужными координатами. Я просто не уверен, как можно было бы добавить кнопку информации в аннотацию и заставить ее выполнять функцию при нажатии.

Изменить: мне нужно, чтобы это было сделано в Swift.


person user4011770    schedule 03.07.2015    source источник


Ответы (2)


вы можете использовать метод ViewForAnnotation для просмотра карты, как показано ниже.

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
    MKAnnotationView *annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"loc"];
    annotationView.canShowCallout = YES;
    annotationView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];

    return annotationView;
}

также вы можете добавить метод для просмотра аксессуаров вызова

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
{
    [self performSegueWithIdentifier:@"DetailsIphone" sender:view];
}

Таким образом, вы можете перейти к направлению на информационной кнопке.

Обновлено для кода Swift

func mapView(mapView: MKMapView!, annotationView view: MKAnnotationView!, 
             calloutAccessoryControlTapped control: UIControl!) {

    if control == view.rightCalloutAccessoryView {
        println("Disclosure Pressed! \(view.annotation.subtitle)"
    }

}

вы можете использовать это для быстрого языка.

Пожалуйста, добавьте этот код для viewforAnnotation :

func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! {
        if !(annotation is CustomPointAnnotation) {
            return nil
        }

        let reuseId = "test"

        var anView = mapView.dequeueReusableAnnotationViewWithIdentifier(reuseId)
        if anView == nil {
            anView = MKAnnotationView(annotation: annotation, reuseIdentifier: reuseId)
            anView.canShowCallout = true

            anView.rightCalloutAccessoryView = UIButton.buttonWithType(.InfoDark) as UIButton

        }
        else {
            anView.annotation = annotation
        }



        let cpa = annotation as CustomPointAnnotation
        anView.image = UIImage(named:cpa.imageName)

        return anView
    }

убедитесь, что вы добавили "MKMapViewDelegate"

person BKjadav    schedule 03.07.2015
comment
Спасибо, но я считаю, что приведенный выше код предназначен для Obj-C, я ищу swift. - person user4011770; 03.07.2015
comment
Я добавил этот код, и он работает, но я не вижу никаких изменений или кнопки информации? - person user4011770; 03.07.2015
comment
Хорошо, теперь я получаю сообщение об ошибке «Использование необъявленного типа» «CustomPointAnnotation». Просто для подтверждения, мой класс: расположение классов: UIViewController, MKMapViewDelegate { // код здесь } - person user4011770; 03.07.2015

Для Swift 2 я сделал это так:

let buttonType = UIButtonType.InfoDark
barAnnotView?.rightCalloutAccessoryView = UIButton(type: buttonType)
person Kegham K.    schedule 30.12.2015