ios - 快速在 PageViewControllers 中传递数据
问题描述
我有一个页面控制器,我在其中添加了 UIViewControllers 并在每个视图控制器中显示一堆表单。我现在面临的问题是我需要获取每个表单中提供的数据并保存它,这是在最后一个视图控制器中完成的。我曾尝试使用委托,但在单击下一个按钮的那一刻,存储的先前值变为nil
并且仅VC
显示最新的值。如何在此文本字段中传递数据。任何帮助都会得到批准。
我的代表
protocol NextDelegate: AnyObject {
func next(pageIndex: Int, model: CreatePropertyModel)
func previous(pageIndex: Int, model: CreatePropertyModel)
}
我是如何创建 VC 数组的
lazy var controllers: [UIViewController] = {
let descVC = DescVC()
descVC.delegate = self
let priceVC = PriceVC()
priceVC.delegate = self
let featuresVC = FeaturesVC()
featuresVC.delegate = self
let picturesVC = PicturesVC()
picturesVC.delegate = self
return [descVC, priceVC, featuresVC, picturesVC]
}()
模型示例
class CreatePropertyModel: DictionaryEncodable {
var title: String?
var desc: String?
var property_type_id: Int?
var property_sub_type_id: Int?
var location_id: Int?
var currency: String?
var price: Int?
}
解决方案
对于您的所有步骤,将其存储在单例中。
protocol Answer {
var isDone: Bool { get }
}
class Answer1: Answer {
static public let updatedNotification = Notification.Name("Answer1Updated")
var name: String? {
didSet {
NotificationCenter.default.post(name: Answer1.updatedNotification, object: nil)
}
}
var isDone: Bool {
return name != nil
}
}
class Answer2: Answer {
var age: Int?
var isDone: Bool {
return age != nil
}
}
class Form {
static let shared = Form()
var answers: [Answer] = [Answer1(), Answer2()]
var isDone: Bool {
return answers.allSatisfy { $0.isDone == true }
}
private init() {}
func reset() {
answers = [Answer1(), Answer2()]
}
var answer1: Answer1? {
return Form.shared.answers.filter { $0 is Answer1 }.first as? Answer1
}
var answer2: Answer2? {
return Form.shared.answers.filter { $0 is Answer2 }.first as? Answer2
}
}
然后,在您的视图控制器中,像这样读取/写入值。
class MyViewControllerForAnswer1: UIViewController {
var answer: Answer1? {
return Form.shared.answer1
}
var name: String? {
get {
return answer?.name
}
set {
answer?.name = newValue
}
}
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(answerUpdated(notification:)), name: Answer1.updatedNotification, object: nil)
}
@objc func answerUpdated(notification: Notification) {
// Update your content
}
}
推荐阅读
- android-sqlite - 更新日期删除sqlite android中的行
- python - 如何在给定 pid 的情况下通知守护进程
- python - 如何通过 Selenium Webdriver 查找具有动态 id 的元素
- matplotlib - .whl 文件无法从 pypi 网站下载
- r - 将列连接并求和 R
- java - 我们可以为同一个端点同时实现@pathparam 和@queryparam
- excel - 需要具有逗号分隔值的列的数据透视表
- javascript - 如何进行切换 onclick 以隐藏和显示视频播放器的 UI?
- text - 如何分解文本块,使其每行仅显示一个单词
- html - 正则表达式年龄验证 17-120