Deaktivieren Sie eine Schaltfläche


95

Ich möchte eine Schaltfläche ( UIButton) unter iOS deaktivieren, nachdem darauf geklickt wurde. Ich bin neu in der Entwicklung für iOS, aber ich denke, der entsprechende Code für Ziel - C lautet:

button.enabled = NO;

Aber ich konnte das nicht schnell machen.

Antworten:


206

Der boolesche Wert für NOin Swift ist false.

button.isEnabled = false

Sollte es tun.

Hier ist die Swift-Dokumentation für UIControldie isEnabledEigenschaft von.


Es ist gleich, ob Sie die Schaltfläche über den Initialisierer oder über Storyboards erstellt haben.
KerrM

Ich meinte, wenn ich keine Steckdose habe. Die Lösung besteht jedenfalls darin, die Schaltfläche global zu definieren.
Daniel Springer

43

Wenn Sie möchten, dass die Schaltfläche ohne das "gedrückte" Erscheinungsbild statisch bleibt:

// Swift 2
editButton.userInteractionEnabled = false 

// Swift 3
editButton.isUserInteractionEnabled = false 

Merken:

1) Dein IBOutletist ->@IBOutlet weak var editButton: UIButton!

2) Der obige Code geht hinein viewWillAppear


1
Ich dachte, das war genau das, wonach ich gesucht habe, aber dies scheint nur UIKit zu sein, nicht AppKit.
Drootang

11

Ich mache das so:

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

Die IBAction ist mit Ihrer Schaltfläche im Storyboard verbunden.

Wenn Sie Ihre Schaltfläche als Outlet eingerichtet haben:

    @IBOutlet weak var myButton: UIButton!

Anschließend können Sie mithilfe von auf die aktivierten Eigenschaften zugreifen. Notation auf dem Schaltflächennamen:

    myButton.enabled = false

Funktioniert gut für mich in Swift 4. Ich habe festgestellt, dass der Absender standardmäßig auf Any anstelle von AnyObject gesetzt ist, aber beide funktionieren immer noch .... Welchen Fehler erhalten Sie?
Krivvenz

Aus Gründen der Klarheit sollten Sie in Ihrer obigen Antwort möglicherweise angeben, dass das IBOutlet erforderlich ist, damit Ihr Code funktioniert. Ob das IBOutlet benötigt wurde oder nicht, hat mich verwirrt. Klar, es wird gebraucht.

Es ist nicht erforderlich, damit es funktioniert. Sie können cast the button in die IBAction eingeben und den Aktivierungsstatus ändern. Wenn Sie es als IBOutlet eingerichtet haben, können Sie dies mit der .notation am Ausgang tun. Beide Wege funktionieren.
Krivvenz

Ich glaube, dass das IBOutlet benötigt wird, wenn Sie die Schaltfläche in einer anderen Funktion deaktivieren möchten.


5

Für diejenigen, die gegoogelt haben, "eine Schaltfläche deaktivieren", aber möglicherweise differenziertere Anwendungsfälle haben:

Mit visuellem Effekt deaktivieren: Wie bereits erwähnt, wird dadurch verhindert, dass die Taste gedrückt wird, und das System lässt sie automatisch deaktiviert aussehen:

yourButton.isEnabled = false 

Deaktivieren ohne visuellen Effekt: Verwenden Sie eine Schaltfläche in einem Fall, in dem sie normal aussehen sollte, sich aber nicht wie eine Schaltfläche verhält, indem Sie auf Berührungen reagieren? Versuche dies!

yourButton.userInteractionEnabled = false

Ausblenden ohne Deaktivieren: Bei diesem Ansatz wird die Schaltfläche ausgeblendet, ohne sie zu deaktivieren (unsichtbar, kann aber dennoch getippt werden):

 yourButton.alpha = 0.0

Entfernen: Dadurch wird die Ansicht vollständig entfernt:

 yourButton.removeFromSuperView()

Tippen Sie auf etwas hinter einer Schaltfläche: Haben Sie zwei Schaltflächen gestapelt und möchten Sie, dass die obere Schaltfläche vorübergehend so wirkt, als wäre sie nicht vorhanden? Wenn Sie den oberen Knopf nicht mehr benötigen, entfernen Sie ihn. Wenn Sie es erneut benötigen, versuchen Sie, seine Höhe oder Breite auf 0 zu reduzieren!


1

Sie können eine Schaltfläche mit isEnabledoder isUserInteractionEnabledEigenschaft aktivieren / deaktivieren .

Der Unterschied zwischen zwei ist:

  • isEnabledist eine Eigenschaft von UIControl (Superklasse von UIButton) und hat visuelle Effekte (dh abgeblendet) von Aktivieren / Deaktivieren

  • isUserInteractionEnabled ist eine Eigenschaft von UIView (Superklasse von UIControl) und hat zwar keinen visuellen Effekt, erreicht aber den Zweck

Verwendung :

myButton.isEnabled = false // Recommended approach

myButton.isUserInteractionEnabled = false // Alternative approach

Wissen Sie, warum ich diesen Fehler erhalte? Value of type '(AnyObject) -> ()' has no member 'isEnabled'

Ich habe auch einen Fehler , wenn ich ändern (_ sender: )zu UIButton. Der Fehler lautet:Value of type '(UIButton) -> ()' has no member 'isEnabled'

0

Sagen wir mal in Swift 4 Sie haben einen Knopf für eine Segue als aufgebaut IBActionwie dieses @IBAction func nextLevel(_ sender: UIButton) {} und Sie haben andere Aktionen in Ihrer Anwendung auftreten (dh eine Schaltuhr, gameplay, etc.). Anstatt die Segue-Schaltfläche zu deaktivieren, möchten Sie Ihrem Benutzer möglicherweise die Option geben, diesen Segue zu verwenden, während die anderen Aktionen noch ausgeführt werden, ohne die App zu beschädigen . Hier ist wie:

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
    }
}

Bitte beachten Sie, dass Sie wahrscheinlich andere Bedingungen haben if appMode == 0und / oder if appMode == 1diese weiterhin auftreten und NICHT mit der mySegueSchaltfläche in Konflikt stehen . So vermeiden Sie einen Absturz .


0

Die Schaltfläche kann in Swift 4 durch den Code deaktiviert werden

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

Wenn Sie Ihren Code versuchen, sollte dieser Fehler auftreten:Value of type '(AnyObject) -> ()' has no member 'isEnabled'

Ich denke du meinst yourButton(sender: UIButton). Ihr aktualisierter Code wird wahrscheinlich den folgenden Fehler verursachen:Value of type '(UIButton) -> ()' has no member 'isEnabled'
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.