Nonaktifkan Tombol


97

Saya ingin menonaktifkan tombol ( UIButton) di iOS setelah diklik. Saya baru dalam pengembangan untuk iOS tetapi saya pikir kode yang setara pada objektif - C adalah ini:

button.enabled = NO;

Tapi aku tidak bisa melakukannya dengan cepat.

Jawaban:


207

Nilai boolean NOdi Swift adalah false.

button.isEnabled = false

harus melakukannya.

Berikut adalah dokumentasi Swift untuk UIControl's isEnabledproperti.


Itu sama apakah Anda membuat tombol melalui penginisialisasinya atau melalui storyboard.
KerrM

Maksud saya ketika saya tidak punya outlet. Bagaimanapun solusinya adalah dengan menentukan tombol secara global.
Daniel Springer

44

Jika Anda ingin tombol tetap statis tanpa tampilan "ditekan":

// Swift 2
editButton.userInteractionEnabled = false 

// Swift 3
editButton.isUserInteractionEnabled = false 

Ingat:

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

2) Kode di atas masuk viewWillAppear


1
Saya pikir inilah yang saya cari, tetapi ini tampaknya hanya UIKit, bukan AppKit.
drootang

12

Cara saya melakukan ini adalah sebagai berikut:

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

IBAction terhubung ke tombol Anda di storyboard.

Jika Anda memiliki pengaturan tombol sebagai Outlet:

    @IBOutlet weak var myButton: UIButton!

Kemudian Anda dapat mengakses properti yang diaktifkan dengan menggunakan. notasi pada nama tombol:

    myButton.enabled = false

Bekerja dengan baik untuk saya di Swift 4. Saya perhatikan secara default itu menetapkan pengirim ke Any, bukan AnyObject tetapi keduanya masih berfungsi .... Kesalahan apa yang Anda dapatkan?
Krivvenz

Untuk kejelasan, mungkin Anda harus menyatakan dalam jawaban Anda di atas bahwa IBOutlet diperlukan agar kode Anda berfungsi. Apakah IBOutlet dibutuhkan atau tidak, itulah yang membuat saya bingung. Jelas, itu dibutuhkan.

Ini tidak diharuskan untuk bekerja. Anda dapat mengetik cast tombol di IBAction dan mengubah status yang diaktifkan atau jika Anda telah mengaturnya sebagai IBOutlet, Anda dapat melakukannya menggunakan .notation di outlet. Kedua cara bekerja.
Krivvenz

Saya yakin bahwa IBOutlet diperlukan jika Anda ingin menonaktifkan tombol dari dalam fungsi lain.


5

Bagi mereka yang mencari "tombol nonaktifkan" di Google tetapi mungkin memiliki kasus penggunaan yang lebih bernuansa:

Nonaktifkan dengan efek visual: Seperti yang dikatakan orang lain, ini akan mencegah tombol ditekan dan sistem akan secara otomatis membuatnya tampak dinonaktifkan:

yourButton.isEnabled = false 

Nonaktifkan tanpa efek visual: Apakah Anda menggunakan tombol dalam kasus di mana seharusnya terlihat normal tetapi tidak berperilaku tombol suka dengan bereaksi terhadap sentuhan? Coba ini!

yourButton.userInteractionEnabled = false

Sembunyikan tanpa menonaktifkan: Pendekatan ini menyembunyikan tombol tanpa menonaktifkannya (tidak terlihat tetapi masih dapat diketuk):

 yourButton.alpha = 0.0

Hapus: Ini akan menghapus tampilan seluruhnya:

 yourButton.removeFromSuperView()

Ketuk sesuatu di belakang tombol: Apakah dua tombol telah ditumpuk dan Anda ingin tombol atas berfungsi sementara seolah-olah tidak ada? Jika Anda tidak membutuhkan tombol atas lagi, lepaskan. Jika Anda akan membutuhkannya lagi, cobalah memadatkan tinggi atau lebarnya menjadi 0!


1

Anda dapat mengaktifkan / menonaktifkan tombol menggunakan isEnabledatau isUserInteractionEnabledproperti.

Perbedaan antara keduanya adalah:

  • isEnabledadalah milik UIControl (kelas super UIButton) dan memiliki efek visual (yaitu berwarna abu-abu) untuk mengaktifkan / menonaktifkan

  • isUserInteractionEnabled adalah properti UIView (kelas super UIControl) dan tidak memiliki efek visual meskipun tetapi mencapai tujuannya

Penggunaan:

myButton.isEnabled = false // Recommended approach

myButton.isUserInteractionEnabled = false // Alternative approach

Apakah Anda tahu mengapa saya mendapatkan kesalahan ini? Value of type '(AnyObject) -> ()' has no member 'isEnabled'

Saya juga mendapatkan kesalahan jika saya mengubah (_ sender: )ke UIButton. Kesalahan tersebut berbunyi:Value of type '(UIButton) -> ()' has no member 'isEnabled'

0

Katakanlah di Swift 4 Anda memiliki tombol yang diatur untuk segue IBActionseperti ini @IBAction func nextLevel(_ sender: UIButton) {} dan Anda memiliki tindakan lain yang terjadi dalam aplikasi Anda (yaitu timer, gamePlay, dll.). Daripada menonaktifkan tombol segue, Anda mungkin ingin memberi pengguna Anda opsi untuk menggunakan segue itu sementara tindakan lain masih terjadi dan TANPA MENGHANCURKAN APLIKASI . Begini caranya:

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

Harap dicatat bahwa Anda mungkin memiliki kondisi lain di dalam if appMode == 0dan / atau if appMode == 1yang masih akan terjadi dan TIDAK bertentangan dengan mySeguetombol. Jadi, MENGHINDARI KESALAHAN .


0

Tombol tersebut dapat Dinonaktifkan di Swift 4 dengan kode

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

Jika Anda mencoba kode Anda kesalahan ini akan terjadi:Value of type '(AnyObject) -> ()' has no member 'isEnabled'

Saya pikir maksud Anda yourButton(sender: UIButton). Kode Anda yang diperbarui kemungkinan besar akan menyebabkan galat berikut:Value of type '(UIButton) -> ()' has no member 'isEnabled'
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.