У меня есть 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»)? Есть ли у ваших segues набор «showLibrary» и «showBank»? Кроме того, вы вызываете 'loadSampleProperties()' где-нибудь? Обновляете ли вы данные таблицы после установки свойств? – albertamg
@albertamg Я только что заметил то, что вы указали: Контроллер представления назначения «LandmarkTableViewController» - это действительно контроллер навигации, контроллер корневого представления которого является «LandmarkTableViewController». Знаете ли вы, как я решаю эту проблему? Потому что я до сих пор не знаю. –
Затем в 'prepareForSegue()' обращайтесь к вашему 'LandmarkTableViewController' следующим образом:' if let navController = segue.destinationViewController as? UINavigationController, let landmarkVC = navController.viewControllers [0] as? LandmarkTableViewController {// ...} ' – albertamg