Как исправить код активации случайной кнопки, показывающий один и тот же порядок каждый раз? - PullRequest
0 голосов
/ 02 мая 2019

У меня 15 UIButtons в моем интерфейсе, для начала все кнопки размыты / отключены.У меня есть код, который случайным образом генерирует массив чисел от 1 до 15, которые затем используются в качестве тегов на каждом из моих UIButton's.Затем я зацикливаюсь над кнопками и вижу, содержит ли массив тегов тег кнопки, над которым я в данный момент зацикливаюсь.

func assignLabels() {

//Loop through the array of buttons.
for button in buttons {

//Check to see if the array of tags contains the current button tag.
  if tags.contains(button.tag){

    print(button.tag)
    button.layer.cornerRadius = 8
    button.alpha = 1.0
    button.isUserInteractionEnabled = true

    switch onStage{
    case 1:
      currentPhoneme = stage1[currentPhonemeNumber]
      button.setTitle(stage1[currentTag], for: .normal)
    //  button.setTitle(button.tag.description, for: .normal)
    case 2:
      currentPhoneme = stage2[currentPhonemeNumber]
      button.setTitle(stage2[currentTag], for: .normal)
    default:
      currentPhoneme = stage1[currentPhonemeNumber]
      button.setTitle(stage1[currentTag], for: .normal)
    }
  }else{
    button.alpha = 0.3
    button.setTitle("-", for: .normal)
  }
  currentTag += 1
  if currentTag == stageCount{
    break
    }
  }
}

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

Что должно произойти, так это то, что при каждом вызове функции включаемые кнопки должны располагаться в случайном порядке по экрану, как каждый раз по другому шаблону.Любая помощь по этому поведению была бы полезна, так как я не знаю, почему порядок всегда одинаков!

1 Ответ

0 голосов
/ 02 мая 2019

Ваш заказ всегда один и тот же, потому что вы назначаете метки на основе переменной currentTag, которая находится в том же порядке.Кроме того, contains возвращает одинаковые результаты независимо от порядка.

Простым решением будет изменить порядок тегов ваших кнопок и использовать тег кнопки вместо currentTag:

func assignLabels() {

    // New random button tag order
    let newtags = Array(1...buttons.count).shuffled()

    // Loop through the array of buttons.
    for (button, newtag) in zip(buttons, newtags) {

        // Assign new tag to button
        button.tag = newtag

        //Check to see if the array of tags contains the current button tag.
        if tags.contains(button.tag){

            let currentTag = button.tag

            ...

}

Обязательно удалите этот код, так как он не нужен:

currentTag += 1
if currentTag == stageCount{
    break
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...