禁用按钮


97

UIButton单击后,我想在iOS上禁用按钮()。我是开发iOS的新手,但是我认为等效的C代码是这样的:

button.enabled = NO;

但是我不能迅速做到这一点。

Answers:


207

NOSwift中的布尔值是false

button.isEnabled = false

应该这样做。

UIControlisEnabled属性的Swift文档。


无论是通过其初始化程序还是通过故事板创建按钮,都是相同的。
KerrM

我的意思是当我没有插座时。无论如何,解决方案是全局定义按钮。
丹尼尔·斯普林格

44

如果您希望按钮保持静态而不出现“被按下”的外观:

// Swift 2
editButton.userInteractionEnabled = false 

// Swift 3
editButton.isUserInteractionEnabled = false 

记得:

1)你IBOutlet是->@IBOutlet weak var editButton: UIButton!

2)上面的代码进入 viewWillAppear


1
我以为这正是我在寻找的东西,但这似乎仅是UIKit,而不是AppKit。
drootang '16

12

我这样做的方式如下:

@IBAction func pressButton(sender: AnyObject) {
    var disableMyButton = sender as? UIButton
    disableMyButton.enabled = false
}

IBAction已连接到情节提要中的按钮。

如果您将按钮设置为插座:

    @IBOutlet weak var myButton: UIButton!

然后,您可以使用来访问已启用的属性。按钮名称的符号:

    myButton.enabled = false

在Swift 4中对我来说工作正常。我注意到默认情况下,它将发件人设置为Any而不是AnyObject,但两者仍然可以工作....您遇到什么错误?
Krivvenz

为了清楚起见,也许您应该在上面的回答中指出,代码正常工作需要IBOutlet。是否需要IBOutlet令我感到困惑。显然,这是必需的。

它不是必需的。您可以在IBAction中键入投射按钮并更改启用状态,或者如果将其设置为IBOutlet,则可以使用插座上的.notation进行操作。两种方式都可以。
Krivvenz

我确实相信,如果要从另一个功能中禁用按钮,则需要IBOutlet。


5

对于那些使用Google“禁用按钮”但可能会有更细微差别的用例的用户:

禁用并具有视觉效果:正如其他人所说,这将防止按下按钮,并且系统会自动使其看起来已禁用:

yourButton.isEnabled = false 

在没有视觉效果的情况下禁用:您是否在按钮应该看起来正常但对触摸的反应不像按钮的情况下使用按钮?试试这个!

yourButton.userInteractionEnabled = false

隐藏而不禁用:此方法隐藏按钮而不禁用按钮(不可见,但仍可以点击):

 yourButton.alpha = 0.0

删除:这将完全删除视图:

 yourButton.removeFromSuperView()

点按按钮后面的内容:是否有两个按钮堆叠在一起,您想让顶部按钮暂时不显示?如果您不再需要顶部按钮,请将其删除。如果您再次需要它,请尝试将其高度或宽度压缩为0!


1

您可以使用isEnabledisUserInteractionEnabled属性启用/禁用按钮。

两者之间的区别是:

  • isEnabled是UIControl的属性(UIButton的超类),具有启用/禁用的视觉效果(即变灰)

  • isUserInteractionEnabled 是UIView的属性(UIControl的超类),虽然没有视觉效果,但可以达到目的

用法:

myButton.isEnabled = false // Recommended approach

myButton.isUserInteractionEnabled = false // Alternative approach

您知道我为什么收到此错误吗?Value of type '(AnyObject) -> ()' has no member 'isEnabled'

如果更改(_ sender: )为,也会出现错误UIButton。错误消息显示:Value of type '(UIButton) -> ()' has no member 'isEnabled'

0

假设在Swift 4中,您IBAction像这样设置了一个按钮,@IBAction func nextLevel(_ sender: UIButton) {} 并且在应用程序中发生了其他操作(例如,计时器,gamePlay等)。与其禁用segue按钮,不如让您的用户选择在其他动作仍在发生且不崩溃APP的情况下使用该segue 。这是如何做:

var appMode = 0

@IBAction func mySegue(_ sender: UIButton) {

    if appMode == 1 {  // avoid crash if button pressed during other app actions and/or conditions
        let conflictingAction = sender as UIButton
        conflictingAction.isEnabled = false
    }
}

请注意,您可能会有其他情况在内部if appMode == 0和/或if appMode == 1仍然会发生,并且不会与mySegue按钮冲突。因此,避免崩溃


0

可以通过代码在Swift 4中禁用该按钮

@IBAction func yourButtonMethodname(sender: UIButon) {
 yourButton.isEnabled = false 
}

如果您尝试使用代码,则将发生以下错误:Value of type '(AnyObject) -> ()' has no member 'isEnabled'

我想你的意思是yourButton(sender: UIButton)。您更新的代码可能会导致以下错误:Value of type '(UIButton) -> ()' has no member 'isEnabled'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.