从不同的视图控制器更改 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 = false
和 self.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
}
我在 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 = false
和 self.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
}