Сегментированный контроль без изменения индекса - PullRequest
0 голосов
/ 30 августа 2018

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

@IBAction func chooseOnePlayerDifficulty(_ sender: UISegmentedControl) {
    switch onePlayerGameType {
        case .sluggish:
            onePlayerGameType = typeOfGame.sluggish
            print("Sluggish difficulty selected.")
        case .average:
            onePlayerGameType = typeOfGame.average
            print("Average difficulty selected.")
        case .ninja:
            onePlayerGameType = typeOfGame.ninja
            print("Ninja difficulty selected.")
    }
}

Теперь, когда я проверяю это в симуляторе, единственное, что выводится на консоль, это «Средняя сложность выбрана». Неважно, какой я выберу. Почему это происходит и как мне это исправить?

РЕДАКТИРОВАТЬ: Я нашел ответ, который работает, задавая этот вопрос на другом форуме. Спасибо за помощь, хотя. Вот ответ оттуда, который работал для меня: Вот ссылка на ответ

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Эта часть вашего кода устанавливает onePlayerGameType в .average, когда вы снова выбираете элемент управления, значение по-прежнему равно .average.

 case .average:
        onePlayerGameType = typeOfGame.average

У меня есть сегментированный элемент управления для пользователя, чтобы выбрать уровень сложности

Если это все, что вам нужно, зачем вам нужен switch, а не просто назначить его напрямую?

enum typeOfGame : Int {
     case sluggish
     case average
     case ninja
}

@IBAction func chooseOnePlayerDifficulty(_ sender: UISegmentedControl) {
                           // assuming  typeOfGame is enum
    let difficultyLevel =  typeOfGame(rawValue: sender.selectedSegmentIndex)
    onePlayerGameType = difficultyLEvel
}
0 голосов
/ 30 августа 2018

Надеюсь, вы зарегистрировали метод действия с контролем сегмента в StoryBoard / XIB или в коде

segmentedControl.addTarget(self, action: "chooseOnePlayerDifficulty:", forControlEvents: .ValueChanged)

Попробуйте со следующим

@IBAction func chooseOnePlayerDifficulty(_ sender: UISegmentedControl) {
    let selectedSegment = sender.selectedSegmentIndex
    switch selectedSegment {
    case 0:
        onePlayerGameType = typeOfGame.sluggish
        print("Sluggish difficulty selected.")
    case 1:
        onePlayerGameType = typeOfGame.average
        print("Average difficulty selected.")
    case 2:
        onePlayerGameType = typeOfGame.ninja
        print("Ninja difficulty selected.")
    default:
        print("Assing default")
    }
}

Редактировать Право @JakeG, обновленный ответ

...