在我的ViewController
内,我有两个IBOutlets signUpButton
和memberButton
,并且这两个按钮都链接到相同的signUpOrMemberButtonPressed()
IBAction func。我正在尝试将highlighted
属性设置为这两个按钮,以便我可以在submitPressed()
IBAction函数中进行相应的后续工作。但我注意到signUpOrMemberButtonPressed()
和submitPressed()
IBActions之间的奇怪行为。点击signUpButton
或memberButton
后,按钮在我的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调用之间运行。
答案 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
}