Swift: использование кнопок UIB в качестве UIImages - PullRequest
0 голосов
/ 28 мая 2018

Я работаю над игрой в кости со Swift.Я хочу дать игрокам возможность удерживать «кости» на ход, когда они нажимают на нее.Из-за этого я хочу использовать кнопки UIB в качестве кубиков.Я получил кубики, работающие как UIImages, и теперь я хочу передать UIImages на UIButtons.Но при этом я получил сообщение об ошибке:

Метки аргументов '(с именем :)' не соответствуют ни одной доступной перегрузке.

Я не знаю и не знаюЯ действительно знаю, как это исправить.

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))
}
}

Ответы [ 3 ]

0 голосов
/ 28 мая 2018

Нет инициализатора для UIButton, использующего аргумент named:.Судя по тому, что ваши dice1 и dice2 переменные объявлены как @IBOutlet, у вас, вероятно, уже есть кнопки, и теперь вы хотите назначать только изображения вместо создания новых кнопок:

dice1.setImage(UIImage(named: stenenArray[randomDiceIndex1]), for: .normal)
0 голосов
/ 28 мая 2018

Поскольку dice1 и dice2 являются IBOutlets , я бы посчитал, что нет необходимости повторно инициализировать их.

Несмотря на то, что 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])
}

, что означает, что вы должны сгенерировать случайные значения для обеих randomDiceIndex переменных до установки изображений UIButtons, в противном случае первый бросок будет всегда нулем.

0 голосов
/ 28 мая 2018

Заменить

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)
...