Ich habe eine MapViewController
mit einer prepareForSegue(_:sender:)
Methode, die ich verwenden möchte, um Daten an LandmarkTableViewController
zu senden, und wird aufgerufen, wenn eine Schaltfläche gedrückt wird.Übergeben von Daten zwischen View-Controllern über das Segment
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let destinationvc = segue.destinationViewController
if let landmarkvc = destinationvc as? LandmarkTableViewController {
if let identifier = segue.identifier {
let library = Landmark(name: "Run Run Shaw Library", properties: ["Chinese Kanji", "Gray", "Green Plants"])
let bank = Landmark(name: "Hang Seng Bank", properties: ["Chinese Kanji", "Green"])
switch identifier {
case "showLibrary" : landmarkvc.passedLandmark = library // pass data to LandmarkTableViewController
case "showBank" : landmarkvc.passedLandmark = bank // pass data to LandmarkTableViewController
default : break
}
}
}
}
Die LandmarkTableViewController
richtig auf jeder Zeile, um die String-Array properties
, mit einer Zeichenfolge anzuzeigen einzurichten. Was ich also vorhabe, ist, die entsprechenden Daten für die Tabelle an properties
zu übergeben, je nachdem welche Taste gedrückt wurde, und LandmarkTableViewController
die entsprechende properties
anzeigen zu lassen.
class LandmarkTableViewController: UITableViewController {
var properties = [String]()
var passedLandmark = Landmark(name: "temp", properties: ["temp"]) // initially set to default value
override func viewDidLoad() {
super.viewDidLoad()
loadSampleProperties()
}
func loadSampleProperties() {
self.properties = passedLandmark!.properties
}
// other methods....
}
class Landmark {
var name: String
var properties: [String]
init?(name: String, properties: [String]) {
self.name = name
self.properties = properties
// Initialization should fail if there is no name or if there is no property.
if name.isEmpty || properties.isEmpty {
return nil
}
}
Allerdings, wenn ich den Code ausführen, nur temp in der Tabellenansicht angezeigt. Ich habe mich schon lange daran gehalten, also jede Hilfe wird sehr geschätzt!
Bearbeiten: loadData() innerhalb von viewDidLoad() wird in die richtige loadSampleProperties() geändert. Beim Posten des Codes in der Frage ist ein Fehler aufgetreten.
Sind Sie sicher, dass Ihr Ziel-View-Controller ein "LandmarkTableViewController" ist (es könnte ein Navigations-Controller sein, dessen Root-View-Controller ein "LandmarkTableViewController" ist)? Haben Ihre Segmente die IDs "showLibrary" und "showBank"? Rufen Sie 'loadSampleProperties()' irgendwo auf? Laden Sie Ihre Tabellendaten nach dem Einstellen der Eigenschaften neu? – albertamg
@albertamg Ich habe gerade bemerkt, worauf Sie hingewiesen haben: Der Ziel-View-Controller von 'LandmarkTableViewController' ist in der Tat ein Navigations-Controller, dessen Root-View-Controller ein' LandmarkTableViewController' ist. Weißt du, wie ich dieses Problem löse? Weil ich immer noch keine Ahnung habe. –
Dann in 'prepareForSegue()' greifen Sie auf Ihren 'LandmarkTableViewController' folgendermaßen zu:' Wenn navController = segue.destinationViewController als? UINavigationController, lassen Sie landmarkVC = navController.viewControllers [0] als? LandmarkTableViewController {// ...} ' – albertamg