我使用
在
MainViewController
创建了一个导航栏按钮
override func viewDidLoad() {
super.viewDidLoad()
navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Save", style: .plain, target: self, action: #selector(presentPopup))
}
@objc func presentPopup() {
let popupVC = PopupViewController()
popupVC.modalPresentationStyle = .overCurrentContext
present(popupVC, animated: true, completion: nil)
}
它呈现一个弹出表单(包含“保存”按钮),用于保存主视图的内容。我希望这个“保存”按钮(在
PopupViewController
中)能够 (1) 将 MainViewController
的导航栏按钮的标题更改为“已保存”并 (2) 禁用该按钮。
到目前为止,我在
PopupViewController
中有以下内容:
let popupBox: UIView = {
let view = UIView()
view.translatesAutoresizingMaskIntoConstraints = false
return view
}()
let button: UIButton = {
let view = UIButton()
view.translatesAutoresizingMaskIntoConstraints = false
return view
}()
override func viewDidLoad() {
super.viewDidLoad()
self.definesPresentationContext = true
view.backgroundColor = .clear
view.addSubview(popupBox)
// configure popupBox
view.addSubview(button)
// configure button
button.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)
}
@objc func buttonAction(_ sender: UIButton) {
// save main VC's contents
// change title of main VC's nav button - WHAT GOES HERE?
// disable main VC's nav button - WHAT GOES HERE?
self.dismiss(animated: true) // dismiss popup
}
我应该在按钮的操作中添加什么来完成我想要做的事情?
只需向
PopupViewController
添加回调,该回调将在 buttonAction
中调用。
var onDismiss: (() -> Void)?
@objc func buttonAction(_ sender: UIButton) {
dismiss(animated: true)
onDismiss?()
//or, you can also run onDismiss after the dismiss animation:
// dismiss(animated: true, completion: onDismiss)
}
在呈现弹出窗口之前指定您想要执行的操作:
@objc func presentPopup() {
let popupVC = PopupViewController()
popupVC.modalPresentationStyle = .overCurrentContext
popupVC.onDismiss = { [weak self] in
guard let self else { return }
self.navigationItem.title = "Saved"
self.navigationItem.rightBarButtonItem?.isEnabled = false
}
present(popupVC, animated: true, completion: nil)
}