Bir Düğmeyi Devre Dışı Bırak


99

İOS'ta bir düğmeyi ( UIButton) tıklandıktan sonra devre dışı bırakmak istiyorum . İOS için geliştirme konusunda yeniyim ama sanırım hedefteki eşdeğer kod - C şudur:

button.enabled = NO;

Ama bunu hızlı yapamazdım.

Yanıtlar:


209

NOSwift için boole değeri false.

button.isEnabled = false

yapmalı.

İşte için Swift dokümantasyonudur UIControlbireyin isEnabledmülkiyet.


Düğmeyi başlatıcısı veya film şeridi aracılığıyla oluşturduğunuzda aynıdır.
KerrM

Çıkışım olmadığında demek istedim. Her nasılsa çözüm, düğmeyi global olarak tanımlamaktır.
Daniel Springer

44

Düğmenin "basılı" görünüm olmadan sabit kalmasını istiyorsanız:

// Swift 2
editButton.userInteractionEnabled = false 

// Swift 3
editButton.isUserInteractionEnabled = false 

Hatırlamak:

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

2) Yukarıdaki kod giriliyor viewWillAppear


1
Bunun tam olarak aradığım şey olduğunu düşündüm, ancak bu yalnızca UIKit gibi görünüyor, AppKit değil.
drootang

12

Bunu yapmamın yolu şu:

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

IBAction, film şeridindeki düğmenize bağlanır.

Bir Outlet olarak düğme ayarınız varsa:

    @IBOutlet weak var myButton: UIButton!

Ardından, etkinleştirilen mülklere. düğme adındaki not:

    myButton.enabled = false

Swift 4'te benim için iyi çalışıyor. Varsayılan olarak göndereni AnyObject yerine Any'e ayarladığını fark ettim ama ikisi de hala çalışıyor .... Hangi hatayı alıyorsun?
Krivvenz

Netlik sağlamak için, belki yukarıdaki cevabınızda, kodunuzun çalışması için IBOutlet'in gerekli olduğunu belirtmelisiniz. IBOutlet'in gerekli olup olmadığı kafamı karıştırdı. Açıkçası, buna ihtiyaç var.

Çalışması için gerekli değildir. Düğmeyi IBAction'a yazabilir ve etkin durumu değiştirebilir veya bir IBOutlet olarak kurduysanız, çıkıştaki. Notunu kullanarak yapabilirsiniz. Her iki yol da çalışır.
Krivvenz

Düğmeyi başka bir işlevin içinden devre dışı bırakmak istiyorsanız IBOutlet'in gerekli olduğuna inanıyorum.


6

Google'da "bir düğmeyi devre dışı bırak" yapanlar, ancak daha ayrıntılı kullanım durumları olabilecekler için:

Görsel efektle devre dışı bırakın : Diğerlerinin de söylediği gibi, bu, düğmeye basılmasını önleyecek ve sistem otomatik olarak devre dışı görünmesini sağlayacaktır:

yourButton.isEnabled = false 

Görsel efekt olmadan devre dışı bırakın: Normal görünmesi ancak dokunuşlara tepki vererek beğenme düğmesi gibi davranmaması gereken bir durumda bir düğme kullanıyor musunuz? Bunu dene!

yourButton.userInteractionEnabled = false

Devre dışı bırakmadan gizle: Bu yaklaşım, düğmeyi devre dışı bırakmadan gizler (görünmez, ancak yine de dokunulabilir):

 yourButton.alpha = 0.0

Kaldır: Bu, görünümü tamamen kaldırır:

 yourButton.removeFromSuperView()

Bir düğmenin arkasındaki bir şeye dokunun: Üst üste iki düğme var ve üst düğmenin geçici olarak orada yokmuş gibi davranmasını mı istiyorsunuz? Üst düğmeye tekrar ihtiyacınız olmayacaksa onu kaldırın. Tekrar ihtiyacınız olursa, yüksekliğini veya genişliğini 0'a sıkıştırmayı deneyin!


1

isEnabledVeya isUserInteractionEnabledözelliğini kullanarak bir düğmeyi etkinleştirebilir / devre dışı bırakabilirsiniz .

İkisi arasındaki fark şudur:

  • isEnabledUIControl'ün (süper UIButton sınıfı) bir özelliğidir ve etkinleştirme / devre dışı bırakma görsel efektlerine (yani gri renkte) sahiptir

  • isUserInteractionEnabled UIView'un (süper UIControl sınıfı) bir özelliğidir ve amaca ulaşmasına rağmen görsel bir etkisi yoktur

Kullanım:

myButton.isEnabled = false // Recommended approach

myButton.isUserInteractionEnabled = false // Alternative approach

Bu hatayı neden aldığımı biliyor musunuz? Value of type '(AnyObject) -> ()' has no member 'isEnabled'

Ben değiştirirseniz ben de hata alıyorum (_ sender: )etmek UIButton. Hata okur:Value of type '(UIButton) -> ()' has no member 'isEnabled'

0

Diyelim ki Swift 4'te buna IBActionbenzer bir bölüm için ayarlanmış bir düğme @IBAction func nextLevel(_ sender: UIButton) {} var ve uygulamanızda gerçekleşen başka eylemleriniz var (örneğin bir zamanlayıcı, gamePlay, vb.). Segue düğmesini devre dışı bırakmak yerine, kullanıcınıza o segmenti diğer eylemler devam ederken ve UYGULAMAYI KAPATMADAN kullanma seçeneği vermek isteyebilirsiniz . Bunu nasıl yapacağınız aşağıda açıklanmıştır:

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

Lütfen içinde başka koşullara sahip olacağınızı if appMode == 0ve / veya if appMode == 1yine de meydana geleceğini ve mySeguedüğmeyle çelişmediğini unutmayın . Böylece, ÇARPIŞMAYI ÖNLEMEK .


0

Düğme Swift 4'te kod ile Devre Dışı Bırakılabilir

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

Kodunuzu denerseniz bu hata oluşmalıdır:Value of type '(AnyObject) -> ()' has no member 'isEnabled'

Sanırım demek istedin yourButton(sender: UIButton). Güncellenen kodunuz büyük olasılıkla aşağıdaki hataya neden olacaktır:Value of type '(UIButton) -> ()' has no member 'isEnabled'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.