从不同的视图控制器更改 UIButton 的状态 - Swift 4.2

Change UIButton's state from a different View Controller - Swift 4.2

我在 VC1 中有 gameCenterButton。其目的是将用户带到 Game Center 的排行榜,在那里他们可以看到高分。如果用户决定使用 Game Center 进行身份验证,那么我想更改 gameCenterButton 的状态(取消灰色并启用)。在我的 GameKitHelper class 我有这些:

func authenticateLocalPlayer() {

    GKLocalPlayer.local.authenticateHandler =
        { (viewController, error) in

            self.gameCenterEnabled = false
            if viewController != nil {

                self.authenticationViewController = viewController
                NotificationCenter.default.post(name: NSNotification.Name(
                    GameKitHelper.PresentAuthenticationViewController),
                                                object: self)
            } else if GKLocalPlayer.local.isAuthenticated {

                self.gameCenterEnabled = true
            }
    }
}

extension GameKitHelper: GKGameCenterControllerDelegate {
func gameCenterViewControllerDidFinish(_ gameCenterViewController: GKGameCenterViewController) {
    gameCenterViewController.dismiss(animated: true, completion: nil)

    }
}

在 VC1 中我有这个:

@IBOutlet weak var gameCenterButton: UIButton!

@IBAction func gameCenter(_ sender: UIButton) {

    GameKitHelper.sharedInstance.showGKGameCenterViewController(viewController: self)

}

我在想 extension GameKitHelper 我可以做...

if gameCenterEnabled == true {

    gameCenterButton.isEnabled = true  // How do I allow for this?

    gameCenterButton.alpha = 1  // How do I allow for this?

如何允许 gameCenterButton 状态在 class 之外发生变化。我在 AppDelegate 有什么需要做的吗?

var gameCenterEnabled = false 放在 GameKitHelper class 的外部(上方),从而使其成为 "global"。系统可能会提示您删除 self.gameCenterEnabled = falseself.gameCenterEnabled = true 中的 self.。这样做。

现在,您可以在 VC1 的 class 中引用 gameCenterEnabled 并像这样更改 gameCenterButton 的状态:

        // code to determine gameCenterButton's state based on gameCenterEnabled's status
        if gameCenterEnabled == false {

            self.gameCenterButton.isEnabled = false
            self.gameCenterButton.alpha = 0.37  
        } else {
            self.gameCenterButton.isEnabled = true
            self.gameCenterButton.alpha = 1
        }