以编程方式更改 VC 导航栏按钮的属性,以响应另一个 VC 中的按钮按下

问题描述 投票:0回答:1

我使用

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
    
}

我应该在按钮的操作中添加什么来完成我想要做的事情?

ios swift uibutton uinavigationbar
1个回答
0
投票

只需向

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)       
}
© www.soinside.com 2019 - 2024. All rights reserved.