it-swarm.com.ru

Как установить образ UIButton в Swift 3?

Первоначально мой код работал.

IBAction func clickedon(_ sender: UIButton) {

    if(gamestate[sender.tag] == 0 && gameisactive == true){

        gamestate[sender.tag] = activeplayer

    if (activeplayer == 1){
        print("working")
        sender.setImage(UIImage(named:"Cross.png"), for: UIControlState()) <-----------
        activeplayer = 2
    }
    else {
        print("working2")
        sender.setImage(UIImage(named:"Nought.png"), for: UIControlState()) <-----------
        activeplayer = 1

    } 
    }

Эти две части кода, которые устанавливают изображение, работали. Эти кнопки не имеют ничего общего с их изображением. Когда на них нажимают, я хочу, чтобы они переключились на эти изображения. Эти изображения находятся в папке с контроллером представления. Я не уверен, почему они перестали работать. Я закомментировал весь другой код, чтобы увидеть, может ли это быть проблемой, но это не так. Печатные заявления распечатываются в обоих случаях. Это просто установленное изображение, которое, похоже, ничего не делает. Там нет ошибки, он просто ничего не делает.

Я не очень понимаю код UIControlState (). Я имитирую онлайн-проект с тем же кодом, и он работает. Это действительно странно. Пожалуйста, дайте мне знать, если у вас есть какие-либо предложения!

4
Aditya Yadav

Функция щелчка мышью IBAction (_ отправитель: UIButton) {

if(gamestate[sender.tag] == 0 && gameisactive == true){

    gamestate[sender.tag] = activeplayer

if (activeplayer == 1){
    print("working")
   sender.setImage(UIImage(named: "Cross.png")!, forState: UIControlState.Normal)
   sender.setImage(UIImage(named:"CrossSelected.png")!, forState: UIControlState.Selected)

    activeplayer = 2
}
else {
    print("working2")
    sender.setImage(UIImage(named: "Nought.png")!, forState: UIControlState.Normal)
    sender.setImage(UIImage(named:"NoughtSelected.png")!, forState: UIControlState.Selected)
    activeplayer = 1

} 
}
4
Himali Shah

Вы можете попробовать это:

let image = UIImage(named: "imagename.png")
yourButton.setBackgroundImage(image, for: .normal)

Я пытаюсь использовать другие вызовы setImage, но не работает. Я нашел этот setBackgroundImage, чтобы позволить изображению появиться. Надеюсь, что это поможет вам.

3
Syafiq Sinwan

В вашем коде UIControlState () можно заменить на UIControlState.normal или UIControlState.highlighted.

https://developer.Apple.com/reference/uikit/uicontrolstate

IBAction func clickedon(_ sender: UIButton) {

    if(gamestate[sender.tag] == 0 && gameisactive == true){

        gamestate[sender.tag] = activeplayer

    if (activeplayer == 1){
        print("working")
        sender.setImage(UIImage(named:"Cross.png"), for: UIControlState.normal)
        sender.setImage(UIImage(named:"Cross_highlighted.png"), for: UIControlState.highlighted)
        activeplayer = 2
    }
    else {
        print("working2")
        sender.setImage(UIImage(named:"Nought.png"), for: UIControlState.normal)
        sender.setImage(UIImage(named:"Nought_highlighted.png"), for: UIControlState.highlighted)
        activeplayer = 1

    } 
}
1
Joey
self.button.setImage(UIImage(named: "namebutton"), for: .normal)

когда вы хотите изменить изображение кнопки на Swift 3, вы можете попробовать мое решение, поверьте мне, потому что я попробовал это и добился успеха. Спасибо 

0
Ace

Вы заставляете ограничения ширины и высоты? Если нет, то ваши кнопки могут быть вырожденными, потому что внутри них нет изображения. Вы также можете установить рамку при установке изображения; Я бы предпочел autolayout.

  UIImage(named:"Cross.png")!
  sender.setImage(image, for: .normal)
  sender.frame.size = image.size
0
Josh Homann

Я разобрался с ответом. UIControlState.normal работает, проблема была в том, что кнопки фактически были расположены под моей доской. Это означало, что я могу нажать на них, но они не появятся. 

Это объясняет, почему печатные заявления и все работало без ошибок. Спасибо!

0
Aditya Yadav