Показывать кнопки случайным образом, нажимая их

Я хочу, чтобы в моем проекте было шесть кнопок, и чтобы они всегда были скрыты, кроме одной. И когда я нажимаю кнопку, которая не скрыта, она должна быть скрыта, а другая кнопка должна появляться случайным образом и делать то же самое. Буду признателен, если кто-то может мне помочь!

3 ответа

Решение

Создай шесть buttons в раскадровке добавьте к ним тег, а затем создайте Action outlet что вы подключаете все кнопки и затем делаете следующее:

@IBAction func button_clicked(_ sender: AnyObject) {
    // generate a random number which is not the same as the tag that you 
    repeat{
        random = Int(arc4random_uniform(6) + 1)
    }
    while random == sender.tag

    // iterate through all subviews in your view to find all buttons
    for view in self.view.subviews{
        // make sure it´s a button
        if view.isKind(of: UIButton.self){
            // create a button from the view you're iterating to
            let button = view as! UIButton
            // if the button tag is equal to the random number you just created we want to show that button 
            if button.tag == random{
                button.isHidden = false
            }
            // else hide it
            else{
                button.isHidden = true
            }
        }
    }
}

Вот пример проекта, который я создал, и который вы можете попробовать. Убедитесь, что прочитали комментарии в коде выше и поняли, что происходит.

Пользовательский интерфейс (раскадровка)введите описание изображения здесь

В моем случае номер тега кнопки для шести кнопок назначается каждому от 0 до 5.

введите описание изображения здесь

//
//  ViewController.swift
//  Stackru
//
//  Created by Seoksoon Jang on 2016. 10. 1..
//  Copyright © 2016년 Seoksoon Jang. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

var buttonTagNumberArray : Array<Int>?
var randomIndex : Int?

@IBOutlet var button1: UIButton!
@IBOutlet var button2: UIButton!
@IBOutlet var button3: UIButton!
@IBOutlet var button4: UIButton!
@IBOutlet var button5: UIButton!
@IBOutlet var button6: UIButton!

@IBAction func button1Action(_ sender: AnyObject) {

    randomIndex = Int(arc4random_uniform(UInt32(buttonTagNumberArray!.count)))

    if (randomIndex! == button1.tag) {
        button1Action(button1)
    } else {

        button1.isHidden = true

        switch randomIndex! {
            case button1.tag :
                print("it should happen : \(button1.tag)")
                break
            case button2.tag :
                button2.isHidden = false;
                break
            case button3.tag :
                button3.isHidden = false;
                break
            case button4.tag :
                button4.isHidden = false;
                break
            case button5.tag :
                button5.isHidden = false;
                break
            case button6.tag :
                button6.isHidden = false;
                break
            default:
                //
                break;
            }

        return ;
    }
}

@IBAction func button2Action(_ sender: AnyObject) {

    randomIndex = Int(arc4random_uniform(UInt32(buttonTagNumberArray!.count)))

    if (randomIndex! == button2.tag) {
        button2Action(button2)
    } else {

        button2.isHidden = true;

        switch randomIndex! {
            case button1.tag :
                button1.isHidden = false;
                break
            case button2.tag :
                print("it should happen : \(button2.tag)")
                break
            case button3.tag :
                button3.isHidden = false;
                break
            case button4.tag :
                button4.isHidden = false;
                break
            case button5.tag :
                button5.isHidden = false;
                break
            case button6.tag :
                button6.isHidden = false;
                break
            default:
                //
                break;
        }

        return ;
    }

}

@IBAction func button3Action(_ sender: AnyObject) {

    randomIndex = Int(arc4random_uniform(UInt32(buttonTagNumberArray!.count)))

    if (randomIndex! == button3.tag) {
        button3Action(button3)
    } else {

        button3.isHidden = true;

        switch randomIndex! {
            case button1.tag :
                button1.isHidden = false;
                break
            case button2.tag :
                button2.isHidden = false;
                break
            case button3.tag :
                print("it should happen : \(button2.tag)")
                break
            case button4.tag :
                button4.isHidden = false;
                break
            case button5.tag :
                button5.isHidden = false;
                break
            case button6.tag :
                button6.isHidden = false;
                break
            default:
                //
                break;
        }

        return ;
    }

}

@IBAction func button4Action(_ sender: AnyObject) {

    randomIndex = Int(arc4random_uniform(UInt32(buttonTagNumberArray!.count)))

    if (randomIndex! == button4.tag) {
        button4Action(button4)
    } else {

        button4.isHidden = true;

        switch randomIndex! {
            case button1.tag :
                button1.isHidden = false;
                break
            case button2.tag :
                button2.isHidden = false;
                break
            case button3.tag :
                button3.isHidden = false;
                break
            case button4.tag :
                print("it should happen : \(button2.tag)")
                break
            case button5.tag :
                button5.isHidden = false;
                break
            case button6.tag :
                button6.isHidden = false;
                break
            default:
                //
                break;
            }

        return ;
    }

}

@IBAction func button5Action(_ sender: AnyObject) {

    randomIndex = Int(arc4random_uniform(UInt32(buttonTagNumberArray!.count)))

    if (randomIndex! == button5.tag) {
        button5Action(button5)
    } else {

        button5.isHidden = true;

        switch randomIndex! {
            case button1.tag :
                button1.isHidden = false;
                break
            case button2.tag :

                break
            case button3.tag :
                button3.isHidden = false;
                break
            case button4.tag :
                button4.isHidden = false;
                break
            case button5.tag :
                print("it should happen : \(button2.tag)")
                break
            case button6.tag :
                button6.isHidden = false;
                break
            default:
                //
                break;
        }

        return ;
    }

}

@IBAction func button6Action(_ sender: AnyObject) {

    randomIndex = Int(arc4random_uniform(UInt32(buttonTagNumberArray!.count)))

    if (randomIndex! == button6.tag) {
        button6Action(button6)
    } else {

        button6.isHidden = true;

        switch randomIndex! {
            case button1.tag :
                button1.isHidden = false;
                break
            case button2.tag :
                button2.isHidden = false;
                break
            case button3.tag :
                button3.isHidden = false;
                break
            case button4.tag :
                button4.isHidden = false;
                break
            case button5.tag :
                button5.isHidden = false;
                break
            case button6.tag :
                print("it should happen : \(button2.tag)")
                break
            default:
                //
                break;
        }

        return ;
    }

}

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
    buttonTagNumberArray = [button1.tag, button2.tag, button3.tag, button4.tag, button5.tag, button6.tag]
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}
}    // class end

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

Вы бы хотели, чтобы код вашего класса выглядел примерно так:

override func viewDidAppear(_ animated: Bool) {
    BT6.isHidden = true
    BT5.isHidden = true
    BT4.isHidden = true
    BT3.isHidden = true
    BT2.isHidden = true
    //Hiding all but one button when the view controller loads
}

@IBOutlet weak var BT6: UIButton!
@IBOutlet weak var BT5: UIButton!
@IBOutlet weak var BT4: UIButton!
@IBOutlet weak var BT3: UIButton!
@IBOutlet weak var BT2: UIButton!
@IBOutlet weak var BT1: UIButton!

@IBAction func BT6(_ sender: AnyObject) {
    //this checks when BT6 is pressed and then hides it
    BT6.isHidden = true
    let random = Int(arc4random_uniform(UInt32(4)))
    if random == 0 {
        BT5.isHidden = false
    } else if random == 1 {
        BT4.isHidden = false
    } else if random == 2 {
        BT3.isHidden = false
    } else if random == 3 {
        BT2.isHidden = false
    } else if random == 4 {
        BT1.isHidden = false
    }
    //this part creates a randomiser between 0-4 and depending on which number turns out, it will hide a certain button
}
@IBAction func BT5(_ sender: AnyObject) {
    BT5.isHidden = true
    let random = Int(arc4random_uniform(UInt32(4)))
    if random == 0 {
        BT6.isHidden = false
    } else if random == 1 {
        BT4.isHidden = false
    } else if random == 2 {
        BT3.isHidden = false
    } else if random == 3 {
        BT2.isHidden = false
    } else if random == 4 {
        BT1.isHidden = false
    }
}
@IBAction func BT4(_ sender: AnyObject) {
    BT4.isHidden = true
    let random = Int(arc4random_uniform(UInt32(4)))
    if random == 0 {
        BT5.isHidden = false
    } else if random == 1 {
        BT6.isHidden = false
    } else if random == 2 {
        BT3.isHidden = false
    } else if random == 3 {
        BT2.isHidden = false
    } else if random == 4 {
        BT1.isHidden = false
    }
}
@IBAction func BT3(_ sender: AnyObject) {
    BT3.isHidden = true
    let random = Int(arc4random_uniform(UInt32(4)))
    if random == 0 {
        BT5.isHidden = false
    } else if random == 1 {
        BT4.isHidden = false
    } else if random == 2 {
        BT6.isHidden = false
    } else if random == 3 {
        BT2.isHidden = false
    } else if random == 4 {
        BT1.isHidden = false
    }
}
@IBAction func BT2(_ sender: AnyObject) {
    BT2.isHidden = true
    let random = Int(arc4random_uniform(UInt32(4)))
    if random == 0 {
        BT5.isHidden = false
    } else if random == 1 {
        BT4.isHidden = false
    } else if random == 2 {
        BT3.isHidden = false
    } else if random == 3 {
        BT6.isHidden = false
    } else if random == 4 {
        BT1.isHidden = false
    }
}
@IBAction func BT1(_ sender: AnyObject) {
    BT1.isHidden = true
    let random = Int(arc4random_uniform(UInt32(4)))
    if random == 0 {
        BT5.isHidden = false
    } else if random == 1 {
        BT4.isHidden = false
    } else if random == 2 {
        BT3.isHidden = false
    } else if random == 3 {
        BT2.isHidden = false
    } else if random == 4 {
        BT6.isHidden = false
    }
}
Другие вопросы по тегам