【问题标题】:Setting a buttons image using another button - Swift使用另一个按钮设置按钮图像 - Swift
【发布时间】:2017-06-30 14:34:24
【问题描述】:

我正在尝试使用另一个按钮更改按钮图像。这个按钮的想法是将按钮重置为其原始状态,以允许用户再次播放。

@IBAction func playAgainButton(_ sender: Any) {
    grid = ["0", "3", "4", "5", "6", "7", "8", "9", "a"]
    let btnCheckMarkImage = UIImage(cgImage: "Image-1" as! CGImage)
    gridSpace0.setImage(btnCheckMarkImage, forState: UIControlState.Normal)
    gameResultLabel.isHidden = true
    //let image = UIImage(named: "blankSpace")
}

@IBAction func gridSpace0(_ sender: Any) {
    let button = sender as! UIButton
    checkIfFree(gridSpace: 0, sender: button)
}

func checkIfFree(gridSpace: Int, sender: UIButton) {
    if(player % 2 != 0)
    {
        player = playerone
        currentPlayerName = playerOneName
    }
    else
    {
        player = playertwo
        currentPlayerName = playerTwoName
    }
    if(grid[gridSpace] != "1" && grid[gridSpace] != "2")
    {
        if(player == playerone)
        {
            let image = UIImage(named: "TicTacToeX")
            grid[gridSpace] = String(player)
            sender.setBackgroundImage(image, for: UIControlState.normal)
            player = player + 1;
        }
        else
        {
            let image = UIImage(named: "TicTacToeO")
            grid[gridSpace] = String(player)
            sender.setBackgroundImage(image, for: UIControlState.normal)
            player = player + 1;
        }

因此,每次用户按下按钮时,都会检查空间是否空闲,如果是,则更改按钮的图像。

就像我说的,我希望再次播放按钮来更改 gridSpace0 按钮的图像,但是当我使用上面的代码时,我得到了这个错误:

我需要使用按钮的发送者部分来识别正在按下哪个按钮,那么如何更改它的背景?

谢谢

【问题讨论】:

  • gridSpace0 是一个函数,而不是一个按钮。 Xcode 甚至表明它是 (Any) -> ()。您要更改的按钮的名称是什么?
  • 当我将按钮“钩”到我给它的名称的 Swift 代码上时,我不知道是否有其他方法来命名/查找它的名称

标签: swift


【解决方案1】:

你的gridSpace0是一个函数,所以你不能这样设置图像。

@IBAction func gridSpace0(_ sender: Any) {
    let button = sender as! UIButton
    checkIfFree(gridSpace: 0, sender: button)
}

您需要先将您的按钮链接到您的视图控制器,然后像这样设置按钮

【讨论】:

  • 谢谢!所以为了清楚起见,当我将一个按钮作为一个动作挂起时,它只会在按下时调用该函数,而实际上并没有命名该按钮。为了允许我访问和更改按钮功能,我必须将其附加为 Outlet?
  • @AlexMarchant 是的,你必须创建一个IBOutlet 来控制按钮的样式,执行禁用、启用、带回之类的操作。对于IBAction,它会被触发取决于您的设置,通常是Touch Up Inside
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-12
  • 2019-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-14
  • 1970-01-01
相关资源
最近更新 更多