2015-10-20 5 views
0

Прежде всего, да. Я знаю, что этот вопрос задавался много раз, но ни одно из решений, похоже, не работает для меня. Я хотел бы добавить стрелку (символ) в свою аннотацию, чтобы после нажатия на нее открывается новая страница (см. Изображение).SWIFT 2: Аннотация со ссылкой на новую страницу.

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

Что я получил до сих пор:

func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! { 

     if annotation is MKUserLocation { 
      //return nil 
      return nil 
     } 

     let reuseId = "pin" 
     var pinView = mapView.dequeueReusableAnnotationViewWithIdentifier(reuseId) as? MKPinAnnotationView 

     if pinView == nil { 
      //println("Pinview was nil") 
      pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseId) 
      pinView!.canShowCallout = true 
      pinView!.animatesDrop = true 
     } 

     let button = UIButton(type: UIButtonType.DetailDisclosure) as UIButton // button with info sign in it 

     pinView?.rightCalloutAccessoryView = button 


     return pinView 
    } 

Кроме того, если я пытаюсь отлаживать это, код Func MapView, кажется, не работать.

код, чтобы создать аннотацию:

Func getMapAnnotations() -> [деятельность] { Var аннотаций: Array = активность

do { 
     let data = NSData(contentsOfURL: NSURL(string: "http:/URL")!) 

     let jsonData = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) 

     for anItem in jsonData as! [Dictionary<String, AnyObject>] { 

      let longtitudeItem = (anItem["LONGTITUDE"] as! NSString).doubleValue; 
      let latitudeItem = (anItem["LATITUDE"] as! NSString).doubleValue; 
      let name = anItem["NAME"] as! String; 
      let description = anItem["DESCRIPTION"] as! String; 

      // do something with the data retrieved: 
      let theSpan:MKCoordinateSpan = MKCoordinateSpanMake(0.01 , 0.01) 
      // let location:CLLocationCoordinate2D = mapView.userLocation.coordinate; 
      let location:CLLocationCoordinate2D = CLLocationCoordinate2D(latitude: latitudeItem , longitude:longtitudeItem) 
      let theRegion:MKCoordinateRegion = MKCoordinateRegionMake(location, theSpan) 

      mapView.setRegion(theRegion, animated: true) 

      let anotation = Activity(latitude: latitudeItem, longitude: longtitudeItem) 
      anotation.title = name 
      anotation.subtitle = description 

      annotations.append(anotation) 


     } } catch let error as NSError { 

      print(error) 

    } 
    return annotations } 

Любая помощь будет высоко ценится, это сводит меня с ума!

Kr,

ответ

0

Вы установили делегат mapView? viewForAnnotation метод называется?

Смотрите также мой пример кода: https://github.com/koogawa/MKMapViewSample/blob/master/MKMapViewSample/ViewController.swift

enter image description here

+0

Привет, вы можете проверить свой код, чтобы увидеть, если вы можете найти то, что я не хватает? Я очень новичок в разработке iOS, поэтому я уверен, что многое можно улучшить, но пока я просто хочу проверить, как добавить кнопку и открыть новое представление. Код: https://github.com/the-traveller/Globe_connect/blob/master/globe_connect/RootViewController.swift Благодарим за помощь. – jonas

+0

Привет, Это исправлено. Вы были правы в отношении «делегата», которого я никогда не понимал (или не нашел никакой информации), что вам нужно было добавить делегата в раскадровку на вашем карте. Спасибо. – jonas

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