Изменение состояния UIButton из другого View Controller - Swift 4.2 - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть gameCenterButton в VC1.Его цель - привести пользователей в списки лидеров Game Center, где они смогут увидеть рекорды.Если пользователь решит пройти аутентификацию в Game Center, то я хочу изменить состояние gameCenterButton (не серое и включить).В моем GameKitHelper классе у меня есть такие:

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 состоянию изменять вне его класса.Есть ли что-то, что мне нужно сделать в AppDelegate?

1 Ответ

0 голосов
/ 02 марта 2019

Поместите var gameCenterEnabled = false за пределы (выше) вашего GameKitHelper класса, что делает его "глобальным".Скорее всего, вам будет предложено удалить self. в self.gameCenterEnabled = false и self.gameCenterEnabled = true.Сделай так.

Теперь вы можете ссылаться на gameCenterEnabled в классе VC1 и изменять состояние 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
        }
...