我正在尝试使用协议和委托模式,它将数组中的数据传递回父视图控制器



我是Xcode的新手,我试图从secondViewController保存一个数组到视图控制器。我在导航控制器中嵌入了一系列视图控制器,所以当我点击导航栏上的'返回'时,我想保留在数组'collectionArray'中收集的数据并保存到'collectionArray2'。下面是我尝试过的协议委托方法:

这是在我的ViewController中我希望数组保存到:

import UIKit
class ViewController: UIViewController {

var collectionArray2: [String] = []

override func viewDidLoad() {
super.viewDidLoad()
let controller = secondViewController()
controller.delegate = self

}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let first = segue.destination as! secondViewController
first.collectionArray.append(contentsOf: collectionArray2)
}
}

extension ViewController: PopupDelegate {
func popupSelectedView(array: [String]) {
collectionArray2.append(contentsOf: array)

}
}

这是我的secondViewController我想取'collectionArray':

import UIKit
protocol PopupDelegate: class{
func popupSelectedView(array: [String])
}
class secondViewController: UIViewController {

var exerciseButton: String!
var collectionArray: [String] = []
weak var delegate: PopupDelegate?

override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func Exercisess(_ sender: UIButton){
exerciseButton = sender.currentTitle
collectionArray.append(exerciseButton!)
}

override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
if self.isMovingFromParent {
delegate?.popupSelectedView(array: collectionArray)
}
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

let second = segue.destination as! FinalViewController
second.cellLabelArray.append(contentsOf: collectionArray)
}
}

谢谢

您的问题是您指的是secondViewController的不同实例。不要在viewDidLoad中设置委托但是当你准备segue时:

override func viewDidLoad() {
super.viewDidLoad()
//let controller = secondViewController() REMOVE THIS
//controller.delegate = self REMOVE THIS

}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let first = segue.destination as! secondViewController
first.collectionArray.append(contentsOf: collectionArray2)
first.delegate = self // set the delate here
}
}
顺便说一下,你应该用大写字母开始命名你所有的类,所以应该是SecondViewController

最新更新