Трудно сказать по вашему вопросу, но, если вы представляете ViewControllerOne из ViewControllerTwo, вы захотите использовать для этого шаблон делегата.Это похоже на то, как вы используете представления таблиц / коллекций, и вы по сути указываете ViewControllerTwo делегата ViewControllerOne, чтобы он мог реагировать на нажатие кнопок.
Начните с создания протокола, определяющего сообщения, которыеViewControllerOne может отправить своему делегату:
protocol ViewControllerOneDelegate: AnyObject {
func viewControllerOneDidTapDone(_ viewController: ViewControllerOne)
func viewControllerOneDidTapCancel(_ viewController: ViewControllerOne)
}
Затем расширьте ViewControllerTwo для реализации вашего протокола:
extension ViewControllerTwo: ViewControllerOneDelegate {
func viewControllerOneDidTapDone(_ viewController: ViewControllerOne) {
// Set your flag or do whatever you need to do on 'Done'.
// Then dismiss viewController.
}
func viewControllerOneDidTapCancel(_ viewController: ViewControllerOne) {
// Dismiss viewController
}
}
В ViewControllerOne сохраните делегат как слабое свойство и вызовите методы делегата для кнопкинажмите:
class ViewControllerOne: UIViewController {
weak var delegate: ViewControllerOneDelegate?
@objc private func donePressed() {
delegate?.viewControllerOneDidTapDone(self)
}
@objc private func cancelPressed() {
delegate?.viewControllerOneDidTapCancel(self)
}
}
Наконец, где-то в ViewControllerTwo, вам нужно установить себя в качестве делегата ViewControllerOne.Вероятно, это будет при создании ViewControllerOne:
class ViewControllerTwo: UIViewController {
...
private func presentViewControllerOne() {
let viewControllerOne = ViewControllerOne(nibName:nil, bundle: nil)
viewControllerOne.delegate = self
// Present or push viewControllerOne
}
...
}