Один из моих переходов переходит от контроллера вида к контроллеру таблицы. Я хочу передать массив между ними, но с контроллером навигации перед контроллером tableview я не могу понять, как передать массив. Как вы передаете данные через контроллер navigatiom контроллеру таблицы?
Быстрая передача данных через навигационный контроллер
Ответ 1
Переопределить prepareForSegue
и установить любое значение в таблице, которое вы хотите. Вы можете захватить табличное представление из свойства UINavigation
viewControllers
.
override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!){
let navVC = segue.destinationViewController as UINavigationController
let tableVC = navVC.viewControllers.first as YourTableViewControllerClass
tableVC.yourTableViewArray = localArrayValue
}
Для Swift 3:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let navVC = segue.destination as? UINavigationController
let tableVC = navVC?.viewControllers.first as! YourTableViewControllerClass
tableVC.yourTableViewArray = localArrayValue
}
Ответ 2
@Ответ Tommy Devoy правильный, но вот то же самое в swift 3
Обновлен Swift 3
// MARK: - Navigation
//In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
if segue.identifier == "yourSegueIdentifier" {
if let navController = segue.destination as? UINavigationController {
if let chidVC = navController.topViewController as? YourViewController {
//TODO: access here chid VC like childVC.yourTableViewArray = localArrayValue
}
}
}
}
Ответ 3
Решение Tommy требует, чтобы вы установили Segue в раскадровке.
Вот только решение для кода:
func functionToPassAsAction() {
var controller: UINavigationController
controller = self.storyboard?.instantiateViewControllerWithIdentifier("NavigationVCIdentifierFromStoryboard") as! UINavigationController
controller.yourTableViewArray = localArrayValue
self.presentViewController(controller, animated: true, completion: nil)
}
Ответ 4
Я получал эту ошибку до решения Horatio.
ERROR: Value of type 'UINavigationController' has no member 'yourTableViewArray'
Таким образом, это может помочь другим, например, мне искать решение code
. Я хотел перенаправить на контроллер навигации, но передал данные контроллеру корневого представления в этом Nav Controller.
if let controller = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "yourNavigationControllerID") as? UINavigationController,
let yourViewController = controller.viewControllers.first as? YourViewController {
yourViewController.yourVariableName = "value"
self.window?.rootViewController = controller // if presented from AppDelegate
// present(controller, animated: true, completion: nil) // if presented from ViewController
}
Ответ 5
Синтаксис FIXED для SWIFT 3
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let navVC = segue.destination as! UINavigationController
let tableVC = navVC.viewControllers.first as! YourTableViewControllerClass
tableVC.yourTableViewArray = localArrayValue
}
Ответ 6
SWIFT 3 (проверенное решение) - Передача данных между VC-Segue с NavigationController
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let navigationContoller = segue.destination as! UINavigationController
let receiverViewController = navigationContoller?.topViewController as ReceiverViewController
receiverViewController.reveivedObject = sentObject
}