分段控制不改变索引

问题描述 投票:0回答:2

我正在编写一个游戏,我有一个分段控件供用户选择难度级别。我在案例中添加了一些简单的代码来检查索引是否发生了变化,但似乎没有。这是代码:

@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.")
    }
}

现在,当我在模拟器中测试时,打印到控制台的唯一内容是“选择平均难度”。无论我选择哪一个。为什么会发生这种情况,我该如何解决?

编辑:我找到了一个答案,通过在另一个论坛上提出这个问题。谢谢你的帮助。这里的答案对我有用:Here is the link to the answer

ios swift uisegmentedcontrol
2个回答
2
投票

你的代码的这一部分将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
投票

我希望你在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,更新答案

© www.soinside.com 2019 - 2024. All rights reserved.