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:
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.
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!
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@IBActionfunc mySegue(_ sender:UIButton){if appMode ==1{// avoid crash if button pressed during other app actions and/or conditions
let conflictingAction = sender asUIButton
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 .
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'
Jeśli chcesz, aby przycisk pozostał statyczny bez wyglądu „wciśniętego”:
Zapamiętaj:
1) Twój
IBOutlet
jest ->@IBOutlet weak var editButton: UIButton!
2) Kod powyżej wchodzi
viewWillAppear
źródło
Sposób, w jaki to robię, jest następujący:
IBAction jest połączony z twoim przyciskiem w scenorysie.
Jeśli masz skonfigurowany przycisk jako punkt sprzedaży:
Następnie możesz uzyskać dostęp do włączonych właściwości za pomocą. notacja na nazwie przycisku:
źródło
Wyłącz przycisk w Swift 3:
źródło
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:
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!
Ukryj bez wyłączania: To podejście powoduje ukrycie przycisku bez wyłączania go (niewidoczny, ale nadal można go dotknąć):
Usuń: spowoduje to całkowite usunięcie widoku:
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!
źródło
Możesz włączyć / wyłączyć przycisk za pomocą właściwości
isEnabled
lubisUserInteractionEnabled
.Różnica między dwoma to:
isEnabled
jest właściwością UIControl (super klasa UIButton) i ma efekty wizualne (tj. wyszarzone) włączania / wyłączaniaisUserInteractionEnabled
jest właściwością UIView (super klasa UIControl) i nie ma żadnego efektu wizualnego, ale spełnia swój celStosowanie :
źródło
Value of type '(AnyObject) -> ()' has no member 'isEnabled'
(_ sender: )
naUIButton
. Błąd brzmi:Value of type '(UIButton) -> ()' has no member 'isEnabled'
Powiedzmy, że w Swift 4 masz skonfigurowany przycisk dla segue,
IBAction
jak 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:Pamiętaj, że prawdopodobnie będziesz mieć inne warunki w obrębie
if appMode == 0
i / lubif appMode == 1
które nadal będą występować i NIE będą kolidować zmySegue
przyciskiem. W ten sposób UNIKANIE AWARII .źródło
Przycisk można wyłączyć w Swift 4 za pomocą kodu
źródło
Value of type '(AnyObject) -> ()' has no member 'isEnabled'
yourButton(sender: UIButton)
. Zaktualizowany kod prawdopodobnie spowoduje następujący błąd:Value of type '(UIButton) -> ()' has no member 'isEnabled'