无法在IBAction方法中手动设置UIButton的突出显示状态

时间:2015-02-18 17:02:52

标签: swift ios8 uibutton ibaction iboutlet

在我的ViewController内,我有两个IBOutlets signUpButtonmemberButton,并且这两个按钮都链接到相同的signUpOrMemberButtonPressed() IBAction func。我正在尝试将highlighted属性设置为这两个按钮,以便我可以在submitPressed() IBAction函数中进行相应的后续工作。但我注意到signUpOrMemberButtonPressed()submitPressed() IBActions之间的奇怪行为。点击signUpButtonmemberButton后,按钮在我的signUpOrMemberButtonPressed()内突出显示,但是当它执行submitPressed()时,调试显示它没有突出显示。这是我的signUpOrMemberButtonPressed()

@IBAction func signUpOrMemberButtonPressed(sender: AnyObject) {
    var button = sender as UIButton
    button.highlighted = true
    if signUpButton.highlighted {
        memberButton.highlighted = false
    } else {
        signUpButton.highlighted = false
    }

    if (signUpButton.highlighted) {
        println("signUpButton is highlighted inside 1st button")
    } else if (memberButton.highlighted) {
        println("memberButton is highlighted inside 1st button")
    } else {
        println("nothing is highlighted inside 1st button")
    }
}

我的submitPressed功能:

@IBAction func submitPressed(sender: AnyObject) {
    if (signUpButton.highlighted) { println("signUpButton is highlighted inside 2st button") }
    else if (memberButton.highlighted) { println("memberButton is highlighted inside 2st button") }
    else { println("nothing is highlighted inside 2nd button")
}

运行我的应用时,我点击了memberButton,然后点击了提交按钮。这是日志输出:

memberButton is highlighted inside 1st button
nothing is highlighted inside 2nd button

没有设置在这两个func调用之间运行。

1 个答案:

答案 0 :(得分:2)

这里发生的是按钮“自动突出显示”(手动设置highlight = true后)。

来自highlighted媒体资源的documentation

  

UIControl会在自动设置并自动清除此状态   在跟踪期间和触摸时触摸进入和退出。

您可以手动设置突出显示的状态,但必须在UIButton取消设置突出显示的状态后执行此操作。您必须在下一个运行循环中执行此操作,您可以使用dispatch_async

以下内容应该有效:

var button = sender as UIButton
dispatch_async(dispatch_get_main_queue()) {
    self.memberButton.highlighted = button == self.memberButton
    self.signUpButton.highlighted = button == self.signUpButton
}