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:
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.
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!
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@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}}
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 .
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'
Jika Anda ingin tombol tetap statis tanpa tampilan "ditekan":
Ingat:
1) Anda
IBOutlet
->@IBOutlet weak var editButton: UIButton!
2) Kode di atas masuk
viewWillAppear
sumber
Cara saya melakukan ini adalah sebagai berikut:
IBAction terhubung ke tombol Anda di storyboard.
Jika Anda memiliki pengaturan tombol sebagai Outlet:
Kemudian Anda dapat mengakses properti yang diaktifkan dengan menggunakan. notasi pada nama tombol:
sumber
Nonaktifkan tombol di Swift 3:
sumber
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:
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!
Sembunyikan tanpa menonaktifkan: Pendekatan ini menyembunyikan tombol tanpa menonaktifkannya (tidak terlihat tetapi masih dapat diketuk):
Hapus: Ini akan menghapus tampilan seluruhnya:
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!
sumber
Anda dapat mengaktifkan / menonaktifkan tombol menggunakan
isEnabled
atauisUserInteractionEnabled
properti.Perbedaan antara keduanya adalah:
isEnabled
adalah milik UIControl (kelas super UIButton) dan memiliki efek visual (yaitu berwarna abu-abu) untuk mengaktifkan / menonaktifkanisUserInteractionEnabled
adalah properti UIView (kelas super UIControl) dan tidak memiliki efek visual meskipun tetapi mencapai tujuannyaPenggunaan:
sumber
Value of type '(AnyObject) -> ()' has no member 'isEnabled'
(_ sender: )
keUIButton
. Kesalahan tersebut berbunyi:Value of type '(UIButton) -> ()' has no member 'isEnabled'
Katakanlah di Swift 4 Anda memiliki tombol yang diatur untuk segue
IBAction
seperti 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:Harap dicatat bahwa Anda mungkin memiliki kondisi lain di dalam
if appMode == 0
dan / atauif appMode == 1
yang masih akan terjadi dan TIDAK bertentangan denganmySegue
tombol. Jadi, MENGHINDARI KESALAHAN .sumber
Tombol tersebut dapat Dinonaktifkan di Swift 4 dengan kode
sumber
Value of type '(AnyObject) -> ()' has no member 'isEnabled'
yourButton(sender: UIButton)
. Kode Anda yang diperbarui kemungkinan besar akan menyebabkan galat berikut:Value of type '(UIButton) -> ()' has no member 'isEnabled'