【问题标题】:Swift UIControlState.Selected remain selected?Swift UIControlState.Selected 保持选中状态?
【发布时间】:2016-02-07 20:20:11
【问题描述】:

我有 3 个按钮供用户选择他们希望查看的类别。

它们的定义如下:

 //outlets
@IBOutlet weak var ChineseButton: UIButton!
@IBOutlet weak var IndianButton: UIButton!
@IBOutlet weak var MexicanButton: UIButton!

我对这些按钮进行了以下操作(将原始图像按钮更改为灰色版本):

//动作

@IBAction func ChineseButtonPressed(sender: UIButton)
{

    ChineseButton.setImage(UIImage(named: "chinese.png"), forState: UIControlState.Normal)
    ChineseButton.setImage(UIImage(named: "chinese.png"), forState: UIControlState.Selected)
    IndianButton.setImage(UIImage(named: "grey-indian.png"), forState: UIControlState.Normal)
    MexicanButton.setImage(UIImage(named: "grey-mexican.png"), forState: UIControlState.Normal)

}
@IBAction func EightFacedButtonPressed(sender: UIButton) {
         IndianButton.setImage(UIImage(named: "indian.png"), forState: UIControlState.Normal)
IndianButton.setImage(UIImage(named: "indian.png"), forState: UIControlState.Selected)
    ChineseButton.setImage(UIImage(named: "grey-chinese.png"), forState: UIControlState.Normal)

    MexicanButton.setImage(UIImage(named: "grey-mexican.png"), forState: UIControlState.Normal)
}

@IBAction func TweleveFacedButtonPressed(sender: UIButton) {
    MexicanButton.setImage(UIImage(named: "mexican.png"), forState: UIControlState.Normal)
MexicanButton.setImage(UIImage(named: "mexican.png"), forState: UIControlState.Selected)
    ChineseButton.setImage(UIImage(named: "grey-chinese.png"), forState: UIControlState.Normal)
    IndianButton.setImage(UIImage(named: "grey-indian.png"), forState: UIControlState.Normal)   
}

这个动作函数也决定了 UIControlState,我有另一个按钮,一旦点击它会带你到另一个页面,但需要了解哪个按钮被选中。

我尝试了以下,但它似乎无法识别选择了哪个按钮?

 @IBAction func GenerateButton(sender: UIButton) {
        if ChineseButton.selected == true{
            println("Chinese button was selected")
        }

我是 swift 新手,因此我们将不胜感激!

谢谢:)

【问题讨论】:

    标签: swift button ibaction control-state


    【解决方案1】:

    您没有选择按钮,您只是在更改图像。

    首先,您可以简化所有代码并将图像设置一次,正常显示为灰色,选中状态为彩色:

    override func viewDidLoad() {
        super.viewDidLoad()
    
        MexicanButton.setImage(UIImage(named: "mexican.png"), forState: UIControlState.Normal)
        MexicanButton.setImage(UIImage(named: "grey-mexican.png"), forState: UIControlState.Selected)
        ChineseButton.setImage(UIImage(named: "grey-chinese.png"), forState: UIControlState.Normal)
        ChineseButton.setImage(UIImage(named: "chinese.png"), forState: UIControlState.Selected)
        IndianButton.setImage(UIImage(named: "grey-indian.png"), forState: UIControlState.Normal)
        IndianButton.setImage(UIImage(named: "indian.png"), forState: UIControlState.Selected) 
    }
    

    您也可以在 Storyboard 上配置此功能,也可以在图标的不同 State Configs 处更改 Image:

    然后,在每个操作上,您只需选择按钮,就会显示正确的图像(您可以对所有按钮使用相同的操作):

    @IBAction func AnyButtonPressed(sender: UIButton) {
        // Deselect all buttons but the pressed one
        for button in [ChineseButton, IndianButton, MexicanButton] {
            button.selected = sender === button
        }
    }
    

    【讨论】:

    • 嗨!谢谢你的帮助。我已经用上面的代码更新了我的代码,但是现在它只显示 1 个按钮,所以我认为我在某个地方出错了。我是否将所有操作函数中的内容替换为:'// 取消选择除 [ChineseButton, IndianButton, MexicanButton] { button.selected = sender === button }' 中的按钮按下的按钮以外的所有按钮?
    • 您的所有按钮都可以调用相同的操作,如果它们都执行相同的操作,则无需为每个按钮自定义操作。也许您替换了 viewDidLoad 方法?您必须添加行,而不是替换您拥有的行。
    • 谢谢,我现在可以开始工作了。我现在面临的唯一问题是,如果用户想从中文更改为印度,它不会允许,因为已经选择了中文按钮。
    • 点击印度人会取消选择中国人,选择印度人。不好吗?
    • 嗨,是的,这很完美。我认为我是一个错误,这意味着这不起作用,但现在一切都很好。非常感谢您的帮助!!
    猜你喜欢
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 2017-07-04
    • 2013-04-15
    • 1970-01-01
    • 2012-08-25
    • 2016-06-19
    • 2012-03-08
    相关资源
    最近更新 更多