2017-02-18 4 views
-1

Firebaseからいくつかの情報をダウンロードし、その情報を私のカスタム注釈クラスに保存します。次に、その情報を次のビューコントローラの変数に転送して、テーブルビューが適切に読み込まれるようにします。値がnilを返すのでクラッシュする代わりに。私は、コールアウトアクセサリボタンを使用してセグを開始しています。私はcalloutAccessoryControlTapped関数を使用しています。 1つのViewControllerから次のViewControllerに一般的にデータを渡す方法を理解しています。これはtableViewと同じように優れています。これはtableViewCellsに似たMapKit注釈を使用していますが、indexRowに相当するMapKitを認識していません。パスは、tableViewsが持っています。ここでprepareSegueを使用しているときに、MapKit注釈に格納された情報を新しいView Controllerに転送するには

import Foundation 
import UIKit 
import MapKit 

class BookAnnotation: NSObject, MKAnnotation { 

var coordinate: CLLocationCoordinate2D 


var title: String? 
var Author:String? 
var Genre: String? 
var Comment: String? 
var User: String? 
var bookPhoto: String? 
var userID: String? 
var userPhoto: String? 
var userLocation: String? 
var bookRating: String? 
var pushingID: String? 
var bookLat: Double? 
var bookLng: Double? 



init(title: String, Author: String, Genre: String, Comment: String, User: String, bookPhoto: String, userID: String, userPhoto: String, userLocation: String, bookRating: String, pushingID: String, coordinate: CLLocationCoordinate2D){ 

    self.title = title 
    self.Author = Author 
    self.Genre = Genre 
    self.Comment = Comment 
    self.User = User 
    self.bookPhoto = bookPhoto 
    self.userID = userID 
    self.userPhoto = userPhoto 
    self.userLocation = userLocation 
    self.bookRating = bookRating 
    self.pushingID = pushingID 

    self.coordinate = coordinate 

    super.init() 
} 

var subtitle: String? { 
    return Comment 

} 


} 

ノートの(いくつかの差異を求めた例である。情報を送信するビューは、それがに行くためにいくつかの情報や、詳細ボタンaccesoryを表示するには、アノテーションを使用してのMapViewでのtableViewではありません次のビューControllerはtableViewですので、この関数ではindexPath.rowを使用できません。今回は辞書の中にものを格納しませんでした。これは意味があると思います)。

+0

可能な複製(http://stackoverflow.com/questions/5210535/passing-data-between-view-controllers) – vikingosegundo

+0

私はあなたのprepareforsegue方法を見ることができますか? –

+0

@vikingosegundoこれは重複していません。私はTableViewsでこれを行う方法を知っていますが、ここで私が頼りにできるindex.pathはありません。 MapKit注釈も同様に機能しますが、これを行うための同等の方法は見つかりませんでした。 –

答えて

0

私のために働く:userKeyという名前の変数を次のViewController(NextVC)に渡したい場合:

01 [ビューコントローラ間でデータを受け渡す]の
var userKey = "" 

func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) 
{ 
    let annotation = view.annotation as! CustomPointAnnotation // I use CustomPointAnnotation, could be MKPointAnnotation 
    let key = annotation.userkey! 
    self.userKey = key 
    performSegue(withIdentifier: "MapToNextVC", sender: self) 
} 

override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
{ 
    if segue.identifier == "MapToNextVC" 
    { 
     let destinationController = segue.destination as! NextVC 
     destinationController.userKey = self.userKey 
    } 
} 
関連する問題