我有一個MapViewController
與prepareForSegue(_:sender:)
方法,我打算用它來發送數據到LandmarkTableViewController
,並在按下按鈕時調用。通過segue在視圖控制器之間傳遞數據
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
}
}
}
}
LandmarkTableViewController
的正確設置了顯示字符串數組properties
,對每行一個字符串。所以我打算做的是根據按下哪個按鈕,將適當的表格數據傳遞給properties
,並讓LandmarkTableViewController
顯示相應的properties
。
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
}
}
然而,當我運行該代碼,只有溫度顯示在表視圖。我一直堅持這個很長一段時間,所以任何幫助非常感謝!
編輯: loadData()viewDidLoad中的()內被改變到正確loadSampleProperties()。我在發佈問題代碼時犯了一個錯誤。
你確定你的目標視圖控制器是一個LandmarkTableViewController(它可能是導航控制器的根視圖控制器是一個LandmarkTableViewController)嗎?你的遊戲是否設置了「showLibrary」和「showBank」標識符?另外,你是否在某處調用loadSampleProperties()方法?設置屬性後是否重新加載表格數據? – albertamg
@albertamg我剛剛注意到了你指出的內容:LandmarkTableViewController的目標視圖控制器確實是一個導航控制器,它的根視圖控制器是一個LandmarkTableViewController。你知道我如何解決這個問題嗎?因爲我還沒有任何想法。 –
然後在'prepareForSegue()'像這樣訪問你的'LandmarkTableViewController':'if let navController = segue.destinationViewController as? UINavigationController,讓landmarkVC = navController.viewControllers [0]爲? LandmarkTableViewController {// ...} – albertamg