我有一个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