ios - 我正在尝试使用协议和委托模式,它将我的数组中的数据传递回父视图控制器
问题描述
我是 Xcode 的新手,正在尝试将 secondViewController 中的数组保存到 View 控制器中。我在导航控制器中嵌入了一系列视图控制器,因此当我单击导航栏上的“返回”时,我想保留在数组 '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)
}
}
这是我要使用“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
推荐阅读
- scala - Split one row into multiple rows of dataframe
- javascript - How do I (correctly) check whether an element is within the viewport in React?
- uml - UML 类 - 当没有派生类时使用基类
- php - Is it possible to tell Composer not to uninstall already installed dependencies when using the composer command?
- python - I read image file as binary strange symbols appear
- javascript - 从单位表示(rem/vh/px/...)计算(javascript)像素的最佳方法
- c# - 微服务收不到 RabbitMq 消息
- spring-boot - 尝试从 Docker 访问 ES 实例时出现 SSLHandshakeException
- python - 使用 Python 3.7+ 进行 100k API 调用,使用 asyncio 并行进行 100
- scala - 在 EMR 笔记本上安装其他 scala 库