Передача данных в PageViewControllers Swift - PullRequest
0 голосов
/ 01 июля 2019

У меня есть контроллер страницы, где я добавил UIViewControllers и отображаю кучу форм в каждом viewcontroller.Проблема, с которой я сейчас сталкиваюсь, заключается в том, что мне нужно получить данные, предоставленные в каждой из форм, и сохранить их, что делается в последнем контроллере представления.Я пытался использовать делегатов, но в тот момент, когда нажимается следующая кнопка, предыдущее сохраненное значение становится 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?
}

1 Ответ

0 голосов
/ 01 июля 2019

Для всех ваших шагов, храните его в синглтоне.


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
    }
}

...