Luc*_*rto 15 pass-data uinavigationcontroller ios swift
我处于这种情况:
我通过准备segue将4个数组从进度表传递到细节练习,它工作正常!当我尝试将数据从详细运动控制器传递回进度表控制器时,问题就开始了.我想使用默认导航后退按钮返回父视图.实际上我正在使用这个代码,但它不起作用,数据从子视图传递到父视图,但我无法在进度表中看到结果,似乎我需要刷新,但我也尝试了reloadData在viewDidLoad之后,它不起作用.有什么建议吗?谢谢.
override func viewWillDisappear(animated : Bool) {
super.viewWillDisappear(animated)
if (self.isMovingFromParentViewController()){
print("n'drio")
let historyView = self.storyboard!.instantiateViewControllerWithIdentifier("historyView") as! HistoryTableViewController
historyView.isFirstTime = false
historyView.arrayData = arrayDataDetails
historyView.arrayRipetizioni = arrayRipetizioniDetails
historyView.arrayPeso = arrayPesoDetails
historyView.arrayRecupero = arrayRecuperoDetails
historyView.tableView.reloadData()
}
}
Run Code Online (Sandbox Code Playgroud)
Een*_*dje 42
当您按下后退按钮时,导航控制器将调用,navigationController(willShowViewController:)
以便您可以使用它将数据传递回初始视图控制器.一个例子如下所示:
使用UINavigationControllerDelegate
:
class DetailsViewController: UIViewController, UINavigationControllerDelegate {
// ^
var data: [String] = [] // Important!
override func viewDidLoad() {
super.viewDidLoad()
navigationController?.delegate = self
data = ["data has changed!"]
}
}
Run Code Online (Sandbox Code Playgroud)
斯威夫特2:
extension DetailsViewController: UINavigationControllerDelegate {
func navigationController(navigationController: UINavigationController, willShowViewController viewController: UIViewController, animated: Bool) {
if let controller = viewController as? ProgressTableViewController {
controller.data = data // Here you pass the data back to your original view controller
}
}
}
Run Code Online (Sandbox Code Playgroud)
斯威夫特3:
extension DetailsViewController: UINavigationControllerDelegate {
func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
(viewController as? ProgressTableViewController)?.data = data // Here you pass the to your original view controller
}
}
Run Code Online (Sandbox Code Playgroud)
在这个例子中,键是使用UINavigationControllerDelegate
和设置导航控制器的委托(在这种情况下是它self
).完成此操作后,您可以使用后退按钮将数据发送回初始视图控制器.
就个人而言,我更喜欢为我的数据使用一个类:
为您的数据使用自定义类:
class Data {
var array: [String] = []
}
Run Code Online (Sandbox Code Playgroud)
进度视图控制器:
class ProgressTableViewController: UITableViewController {
var data = Data()
override func viewDidLoad() {
super.viewDidLoad()
data.array = ["some data"]
}
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
tableView.reloadData()
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return data.array.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell()
cell.textLabel?.text = data.array[indexPath.row]
return cell
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
performSegue(withIdentifier: "exerciseSegue", sender: self)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "exerciseSegue" {
let destination = segue.destinationViewController as! DetailsViewController
destination.data = data
}
}
}
Run Code Online (Sandbox Code Playgroud)
细节视图控制器:
class DetailsViewController: UIViewController {
var data = Data()
override func viewDidLoad() {
super.viewDidLoad()
data.array = ["data has changed!"]
}
}
Run Code Online (Sandbox Code Playgroud)
在最后一个示例中,您不必担心传递数据.每当您更改数据时,使用相同类的控制器也会进行更改.
归档时间: |
|
查看次数: |
15343 次 |
最近记录: |