【发布时间】:2016-11-21 12:35:49
【问题描述】:
我有一个MapViewController 和一个prepareForSegue(_:sender:) 方法,我打算用它来向LandmarkTableViewController 发送数据,并在按下按钮时调用。
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
}
}
但是,当我运行代码时,表格视图中只显示 temp。 我已经坚持了很长时间,所以非常感谢任何帮助!
编辑: viewDidLoad() 中的 loadData() 更改为正确的 loadSampleProperties()。我在将代码发布到问题时出错。
【问题讨论】:
-
您确定您的目标视图控制器是
LandmarkTableViewController(它可能是根视图控制器为LandmarkTableViewController的导航控制器)?您的 segue 是否设置了“showLibrary”和“showBank”标识符?另外,您在某处打电话给loadSampleProperties()吗?设置属性后是否重新加载表数据? -
@albertamg 我刚刚注意到你指出的:
LandmarkTableViewController的目标视图控制器确实是一个导航控制器,其根视图控制器是LandmarkTableViewController。你知道我是怎么解决这个问题的吗?因为我仍然没有任何想法。 -
然后在
prepareForSegue()中访问您的LandmarkTableViewController,如下所示:if let navController = segue.destinationViewController as? UINavigationController, let landmarkVC = navController.viewControllers[0] as? LandmarkTableViewController { //... }
标签: ios swift segue viewcontroller