2015-10-16 3 views
-1

Ошибка при попытке добавить кнопку в аннотации.Добавить кнопку в MKPointAnnotation

Прежде чем я задал этот вопрос я искал ответы на следующих страницах: How to add a button to the MKPointAnnotation? , Adding a button to MKPointAnnotation? и т.д. Но все не могли бы мне помочь.

Это то, что пытался сделать:

var annotation1 = MKPointAnnotation() 
annotation1.setCoordinate(locationKamer1) 
annotation1.title = "Title1" 
annotation1.subtitle = "Subtitle1" 
// here i want to add a button which has a segue to another page. 
mapView.addAnnotation(annotation1) 

Не знаю, если то, что я пытаюсь сделать, это не работает. Я экспериментирую с быстрым в первый раз.

Надежда кто-то может помочь мне :)

Спасибо заранее!

+0

Возможный дубликат [Как я могу добавить кнопку MKPointAnnotation] (http://stackoverflow.com/questions/28225296/how-can-i-add-a-button-to-mkpointannotation) – vikingosegundo

ответ

3

Это ответ на вашу первой ссылку в основном правильно, хотя он должен быть обновлена ​​для Swift 2.

Нижней линии, в ответе на ваш вопрос, вы не добавите кнопку при создании аннотации. Вы создаете кнопку при создании своего аннотационного представления в viewForAnnotation.

Таким образом, вы должны:

  1. Установите контроллер представления, чтобы быть делегатом от вида карты.

  2. сделать контроллер представления соответствовать протоколу картографического делегата, например:

    class ViewController: UIViewController, MKMapViewDelegate { ... } 
    
  3. Добавить SEGUE от контроллера представления (не кнопка) на следующую сцену управления тащит из вид значка контроллера над сценой с видом карты к следующей сцене:

    enter image description here

    затем выберите эту SEGUE, а затем дать это раскадровка идентификатор («NextScene» в моем примере, хотя вы должны использовать более описательное название):

    enter image description here

  4. Реализовать viewForAnnotation добавить кнопку в правом аксессуаре.

    func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? { 
        var view = mapView.dequeueReusableAnnotationViewWithIdentifier(annotationIdentifier) 
        if view == nil { 
         view = MKPinAnnotationView(annotation: annotation, reuseIdentifier: annotationIdentifier) 
         view?.canShowCallout = true 
         view?.rightCalloutAccessoryView = UIButton(type: .DetailDisclosure) 
        } else { 
         view?.annotation = annotation 
        } 
        return view 
    } 
    
  5. Реализовать calloutAccessoryControlTapped, который (а), который захватывает аннотации была использована; и (б) инициирует переход:

    var selectedAnnotation: MKPointAnnotation! 
    
    func mapView(mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) { 
        if control == view.rightCalloutAccessoryView { 
         selectedAnnotation = view.annotation as? MKPointAnnotation 
         performSegueWithIdentifier("NextScene", sender: self) 
        } 
    } 
    
  6. Реализовать prepareForSegue, который будет передавать необходимую информацию (предположительно вы хотите передать аннотацию и, следовательно, имеют annotation свойство в том, что второй контроллер представления).

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
        if let destination = segue.destinationViewController as? SecondViewController { 
         destination.annotation = selectedAnnotation 
        } 
    } 
    
  7. Теперь вы можете создать аннотацию, как вы были раньше:

    let annotation = MKPointAnnotation() 
    annotation.coordinate = coordinate 
    annotation.title = "Title1" 
    annotation.subtitle = "Subtitle1" 
    mapView.addAnnotation(annotation) 
    
+0

Большое спасибо, я не понял принцип, что я не добавляю кнопку при создании аннотации. Теперь его яснее для меня! – Mick

Смежные вопросы