Wyłącz przycisk

97

Chcę wyłączyć przycisk ( UIButton) w systemie iOS po jego kliknięciu. Jestem nowy w programowaniu na iOS, ale myślę, że odpowiednik kodu w celu - C to:

button.enabled = NO;

Ale nie mogłem tego zrobić szybko.

baranbaris
źródło

Odpowiedzi:

207

Wartość logiczna dla NOjęzyka Swift to false.

button.isEnabled = false

powinien to zrobić.

Tutaj jest dokumentacja Swift dla UIControl„s isEnablednieruchomości.

KerrM
źródło
Jest tak samo, niezależnie od tego, czy utworzyłeś przycisk za pomocą jego inicjatora, czy za pomocą scenorysów.
KerrM
Miałem na myśli, kiedy nie mam gniazdka. W każdym razie rozwiązaniem jest globalne zdefiniowanie przycisku.
Daniel Springer
44

Jeśli chcesz, aby przycisk pozostał statyczny bez wyglądu „wciśniętego”:

// Swift 2
editButton.userInteractionEnabled = false 

// Swift 3
editButton.isUserInteractionEnabled = false 

Zapamiętaj:

1) Twój IBOutletjest ->@IBOutlet weak var editButton: UIButton!

2) Kod powyżej wchodzi viewWillAppear

Daviiid
źródło
1
Myślałem, że to jest dokładnie to, czego szukałem, ale wydaje się, że to tylko UIKit, a nie AppKit.
drootang
12

Sposób, w jaki to robię, jest następujący:

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

IBAction jest połączony z twoim przyciskiem w scenorysie.

Jeśli masz skonfigurowany przycisk jako punkt sprzedaży:

    @IBOutlet weak var myButton: UIButton!

Następnie możesz uzyskać dostęp do włączonych właściwości za pomocą. notacja na nazwie przycisku:

    myButton.enabled = false
Krivvenz
źródło
U mnie działa dobrze w Swift 4. Zauważyłem, że domyślnie ustawia on nadawcę na Any zamiast AnyObject, ale oba nadal działają… Jaki błąd otrzymujesz?
Krivvenz
Dla jasności, być może powinieneś zaznaczyć w swojej odpowiedzi powyżej, że IBOutlet jest wymagany do działania twojego kodu. To, czy IBOutlet był potrzebny, czy nie, jest tym, co mnie zdezorientowało. Oczywiście jest to potrzebne.
Nie jest to wymagane do działania. Możesz wpisać rzut przycisk w IBAction i zmienić status włączony lub jeśli masz go skonfigurowany jako IBOutlet, możesz to zrobić za pomocą .notacji na wylocie. Oba sposoby działają.
Krivvenz
Uważam, że IBOutlet jest potrzebny, jeśli chcesz wyłączyć przycisk z poziomu innej funkcji.
7

Wyłącz przycisk w Swift 3:

yourButton.isEnabled = false
Gilad Brunfman
źródło
5

Dla tych, którzy wpisali w Google „wyłącz przycisk”, ale mogą mieć bardziej szczegółowe przypadki użycia:

Wyłącz z efektem wizualnym: Jak powiedzieli inni, zapobiegnie to naciśnięciu przycisku, a system automatycznie sprawi, że będzie wyglądał na wyłączony:

yourButton.isEnabled = false 

Wyłącz bez efektu wizualnego: Czy używasz przycisku w przypadku, gdy powinien wyglądać normalnie, ale nie powinien zachowywać się jak przycisk „lubi”, reagując na dotknięcia? Spróbuj tego!

yourButton.userInteractionEnabled = false

Ukryj bez wyłączania: To podejście powoduje ukrycie przycisku bez wyłączania go (niewidoczny, ale nadal można go dotknąć):

 yourButton.alpha = 0.0

Usuń: spowoduje to całkowite usunięcie widoku:

 yourButton.removeFromSuperView()

Stuknij coś za przyciskiem: Masz ustawione dwa przyciski i chcesz, aby górny przycisk tymczasowo zachowywał się tak, jakby go tam nie było? Jeśli nie będziesz ponownie potrzebować górnego przycisku, usuń go. Jeśli będziesz go ponownie potrzebować, spróbuj skondensować jego wysokość lub szerokość do 0!

Dave G.
źródło
1

Możesz włączyć / wyłączyć przycisk za pomocą właściwości isEnabledlub isUserInteractionEnabled.

Różnica między dwoma to:

  • isEnabledjest właściwością UIControl (super klasa UIButton) i ma efekty wizualne (tj. wyszarzone) włączania / wyłączania

  • isUserInteractionEnabled jest właściwością UIView (super klasa UIControl) i nie ma żadnego efektu wizualnego, ale spełnia swój cel

Stosowanie :

myButton.isEnabled = false // Recommended approach

myButton.isUserInteractionEnabled = false // Alternative approach
Jayprakash Dubey
źródło
Czy wiesz, dlaczego otrzymuję ten błąd? Value of type '(AnyObject) -> ()' has no member 'isEnabled'
Otrzymuję również błąd, jeśli zmienię (_ sender: )na UIButton. Błąd brzmi:Value of type '(UIButton) -> ()' has no member 'isEnabled'
0

Powiedzmy, że w Swift 4 masz skonfigurowany przycisk dla segue, IBActionjak ten, @IBAction func nextLevel(_ sender: UIButton) {} i masz inne akcje występujące w Twojej aplikacji (np. Licznik czasu, gra itp.). Zamiast wyłączać przycisk przejścia, możesz chcieć dać użytkownikowi opcję korzystania z tego przejścia, podczas gdy inne działania nadal występują i BEZ AWARII APLIKACJI . Oto jak:

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

Pamiętaj, że prawdopodobnie będziesz mieć inne warunki w obrębie if appMode == 0i / lub if appMode == 1które nadal będą występować i NIE będą kolidować z mySegueprzyciskiem. W ten sposób UNIKANIE AWARII .


źródło
0

Przycisk można wyłączyć w Swift 4 za pomocą kodu

@IBAction func yourButtonMethodname(sender: UIButon) {
 yourButton.isEnabled = false 
}
Tina Detroja
źródło
Jeśli spróbujesz użyć kodu, powinien wystąpić ten błąd:Value of type '(AnyObject) -> ()' has no member 'isEnabled'
Myślę, że masz na myśli yourButton(sender: UIButton). Zaktualizowany kod prawdopodobnie spowoduje następujący błąd:Value of type '(UIButton) -> ()' has no member 'isEnabled'