【问题标题】:Swift: Using UIButtons as UIImagesSwift:使用 UIButtons 作为 UIImages
【发布时间】:2018-11-06 17:41:09
【问题描述】:

我正在使用 Swift 开发一款骰子游戏。我想让玩家选择在点击它时持有一个“骰子”。因此,我想使用 UIButtons 作为骰子。我让骰子作为 UIImages 工作,现在我想将 UIImages 转移到 UIButtons。但是在执行此操作时出现错误:

参数标签 '(named:)' 不匹配任何可用的重载。

我有点无能为力,也不知道如何解决这个问题。

import UIKit

class ViewController: UIViewController {
@IBOutlet weak var dice1: UIButton!
@IBOutlet weak var dice2: UIButton!

let stenenArray = ["Steen1, Steen2, Steen3, Steen4, Steen5, Steen6"]

var randomDiceIndex1 : Int = 0
var randomDiceIndex2 : Int = 0

override func viewDidLoad() {
    super.viewDidLoad()

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()

}

@IBAction func buttonPressed(_ sender: Any) {
    updateDiceImages()
}


func updateDiceImages(){
    dice1 = UIButton(named: stenenArray[randomDiceIndex1])
    dice2 = UIButton?(named: stenenArray[randomDiceIndex2])

    randomDiceIndex1 = Int(arc4random_uniform(6))
    randomDiceIndex2 = Int(arc4random_uniform(6))
}
}

【问题讨论】:

    标签: ios swift uibutton uiimage


    【解决方案1】:

    由于dice1dice2IBOutlets,我认为没有必要重新初始化它们。

    尽管如此,UIButton(named: ...) 似乎很奇怪!

    那么你应该怎么做而不是 - 奇怪的初始化 - 按钮:

    dice1 = UIButton(named: stenenArray[randomDiceIndex1])
    dice2 = UIButton?(named: stenenArray[randomDiceIndex2])
    

    就是简单的给每个人设置一张图片,使用setImage(_:for:)方法:

    dice1.setImage(UIImage(named: stenenArray[randomDiceIndex1]), for: .normal)
    dice2.setImage(UIImage(named: stenenArray[randomDiceIndex2]), for: .normal)
    

    更新:

    您似乎需要将updateDiceImages() 实现为:

    func updateDiceImages() {
        randomDiceIndex1 = Int(arc4random_uniform(6))
        randomDiceIndex2 = Int(arc4random_uniform(6))
    
        dice1 = UIButton(named: stenenArray[randomDiceIndex1])
        dice2 = UIButton?(named: stenenArray[randomDiceIndex2])
    }
    

    这意味着您应该在设置 UIButtons 图像之前randomDiceIndex 变量生成随机值,否则第一卷将始终为零。

    【讨论】:

    • 感谢您的解释,它摆脱了错误。现在的按钮是图像,但它不能让 randomDiceIndex 工作。我做的函数现在好像什么都没做。
    • @G.Venem 似乎您应该在设置 UIButtons 图像之前为 randomDiceIndex 变量生成随机值...
    【解决方案2】:

    UIButton 没有使用参数 named: 的初始化程序。从您的dice1dice2 变量被声明为@IBOutlet 猜测,您可能已经有了按钮,现在只想分配图像而不是创建新按钮:

    dice1.setImage(UIImage(named: stenenArray[randomDiceIndex1]), for: .normal)
    

    【讨论】:

      【解决方案3】:

      替换

      dice1 = UIButton(named: stenenArray[randomDiceIndex1])
      dice2 = UIButton?(named: stenenArray[randomDiceIndex2]) 
      

      dice1.setImage(UIImage(named: stenenArray[randomDiceIndex1]), for: .normal)
      dice2.setImage(UIImage(named: stenenArray[randomDiceIndex2]), for: .normal)
      

      【讨论】:

      • 酷,它摆脱了错误。但是现在如果我在模拟器上运行它,按钮上的骰子图像将不会显示。它只是在模拟器上显示“按钮”字样。
      • @G.Venem 从 XIB/StoryBoard 中的 UIButton 中移除“按钮”标签
      猜你喜欢
      • 2011-11-16
      • 1970-01-01
      • 2017-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-21
      相关资源
      最近更新 更多