ios - 如何从其他 ViewController 启用 leftBarButtonItem?

标签 ios iphone swift swift3 viewcontroller

当我单击 MessageController 上的左栏按钮时,我将其 isEnabled 设置为 false。然后我展示 PopUpViewController 并在按钮上单击 removeAnimate() 函数运行。在该函数中,我想将 MessageController 左栏按钮设置为 isEnabled 为真。我试过了,但没有用。有人可以帮忙吗?

class PopUpViewController: UIViewController {
...
override func viewDidLoad() {
    super.viewDidLoad()

    self.view.backgroundColor = UIColor.black.withAlphaComponent(0.8)
    self.showAnimate()
}
func showAnimate()
{
    view.backgroundColor = UIColor.black.withAlphaComponent(0.8)
    self.view.transform = CGAffineTransform(scaleX: 1.3, y: 1.3)
    self.view.alpha = 0.0;
    UIView.animate(withDuration: 0.25, animations: {
        self.view.alpha = 1.0
        self.view.transform = CGAffineTransform(scaleX: 1.0, y: 1.0)
    });
}
func removeAnimate()
{
 let messagView = MessageController()
    UIView.animate(withDuration: 0.25, animations: {
        self.view.transform = CGAffineTransform(scaleX: 1.3, y: 1.3)
        self.view.alpha = 0.0;
        }, completion:{(finished : Bool)  in
            if (finished)
            {
                self.view.removeFromSuperview()
                messagView.navigationItem.leftBarButtonItem?.isEnabled = true
            }
    });
}
lazy var cancleButton: UIButton = {
    let button = UIButton(type: .system)
    button.translatesAutoresizingMaskIntoConstraints = false
    button.setTitle("Cancel", for: UIControlState())
    button.titleLabel?.font = UIFont.boldSystemFont(ofSize: 20)
    button.tintColor = .white
    button.addTarget(self, action: #selector(removeAnimate), for: .touchUpInside)
    return button
}()
}

消息 View Controller

class MessageController: UITableViewController {
override func viewDidLoad() {
    super.viewDidLoad()

    navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Logout", style: .plain, target: self, action: #selector(preformSettings))
}
func preformSettings(){

    let popViewController =  PopUpViewController()
    self.addChildViewController(popViewController)
    popViewController.view.frame = self.view.frame
    self.view.addSubview(popViewController.view)
    popViewController.didMove(toParentViewController: self)
    navigationItem.leftBarButtonItem?.isEnabled = false
}

}

最佳答案

您可以使用协议(protocol)。编写协议(protocol)

protocol PopViewControllerDelegate: class {
     func enableBackButton()
}

在 PopUpViewController 中创建此协议(protocol)的对象。

class PopUpViewController: UIViewController {
    var delegate: PopViewControllerDelegate?
    ....

    func removeAnimate() {
       ...
       delegate?.enableBackButton()
    }

}

在 MessageController 中实现这个协议(protocol)。

class MessageController: UITableViewController {

   func preformSettings(){
       let popViewController =  PopUpViewController()
       popViewController.delegate = self
       self.addChildViewController(popViewController)
       ....
   }

}

extension MessageController: PopViewControllerDelegate {
    func enableBackButton() {
        navigationItem.leftBarButtonItem?.isEnabled = true
    }
}

关于ios - 如何从其他 ViewController 启用 leftBarButtonItem?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39892805/

相关文章:

ios - swift : Change UIImageView based on IF

iphone - 为什么我无法使用正确的部署目标在 iPad 上安装应用程序?

swift - 在 SwiftUI 中使用 google 帐户登录后是否可以更改您的 View ?

swift - Xcode,没有这样的模块

objective-c - 如何将底部阴影添加到具有动态高度的表格单元格?

ios - 'sizeWithFont :constrainedToSize:lineBreakMode:'is deprecated:

iphone - 在 iOS 5 上出现没有动画的键盘

iphone - 将多个 pdf 文档合并为单个文档不起作用

ios - 关于在 iPhone 中将数据存储在共享首选项中的建议

swift - 排序时间字符串 (HH :mm) in ascending order in Swift