Pada beberapa titik di aplikasi saya, saya memiliki yang disorot UIButton
(misalnya ketika pengguna memiliki jari pada tombol) dan saya perlu mengubah warna latar belakang saat tombol disorot (jadi saat jari pengguna masih pada tombol) .
Saya mencoba yang berikut ini:
_button.backgroundColor = [UIColor redColor];
Tapi itu tidak berhasil. Warnanya tetap sama. Saya mencoba potongan kode yang sama ketika tombol tidak disorot dan berfungsi dengan baik. Saya juga mencoba menelepon -setNeedsDisplay
setelah mengubah warna, itu tidak berpengaruh.
Bagaimana cara memaksa tombol untuk mengubah warna latar belakang?
ios
objective-c
xcode
uibutton
MartinMoizard
sumber
sumber
Jawaban:
Anda dapat mengganti
UIButton
'ssetHighlighted
metode.Objektif-C
Swift 3.0 dan Swift 4.1
sumber
backgroundColor = isHighlighted ? .lightGray : .white
Tidak yakin apakah ini memecahkan apa yang Anda cari, atau cocok dengan lanskap pengembangan umum Anda, tetapi hal pertama yang saya coba adalah mengubah warna latar tombol pada acara touchDown.
Pilihan 1:
Anda akan membutuhkan dua peristiwa untuk ditangkap, UIControlEventTouchDown adalah untuk saat pengguna menekan tombol. UIControlEventTouchUpInside dan UIControlEventTouchUpOutside akan digunakan ketika mereka melepaskan tombol untuk mengembalikannya ke keadaan normal.
Pilihan 2:
Kembalikan gambar yang dibuat dari warna highlight yang Anda inginkan. Ini juga bisa menjadi kategori.
dan kemudian ubah status tombol yang disorot:
sumber
layer.cornerRadius
dan menggunakan opsi # 2, Anda harus memastikan untuk mengaturclipsToBounds
true untuk mendapatkan sudut gambar yang bulat juga.Tidak perlu mengganti
highlighted
sebagai properti yang dihitung. Anda dapat menggunakan pengamat properti untuk memicu perubahan warna latar belakang:Cepat 4
sumber
File>New>File>Cocoa Touch Class
dan mengaturnyasubclass of UIButton
. Beri nama file untuk exCustomButton
, yang akan menjadi nama file dan nama kelas. Di dalam file ini, masukkanoverride var highlighted
kode yang ditunjukkan di atas. Langkah terakhir, atur UIButton pada Interface Builder untuk menggunakanCustomButton
subclass ini dengan membuka halaman Properti di mana dikatakan "Kelas Kustom" dan memiliki kotak dropdown. Itu akan mengatakan "UIButton" dalam huruf abu-abu. Daftar dropdown akan menampilkan CustomButton. Pilih ini, dan tombol sekarang disubklasifikasikan.isHighlighted = false
suatu tempat di awal (misalnya inititialization).Ekstensi generik berguna di Swift:
Swift 3.0
sumber
Di Swift Anda dapat mengganti pengakses properti yang disorot (atau dipilih) daripada mengganti metode setHighlighted
sumber
highlighted
properti di UIButton. Jawabannya adalah itu adalah properti di UIControl yang diwarisi dari UIButton.Ganti variabel yang disorot. Menambahkan
@IBInspectable
membuat Anda mengedit backgroundColor yang disorot di storyboard, yang bagus juga.sumber
solusi yang lebih ringkas (berdasarkan jawaban @ aleksejs-mjaliks ):
Cepat 3/4 + :
Swift 2:
Jika Anda tidak ingin mengganti, ini adalah versi terbaru dari jawaban @ timur-bernikowich ( Swift 4.2 ):
sumber
Ekstensi UIButton dengan sintaks Swift 3+ :
Gunakan seperti:
Jawaban Asli: https://stackoverflow.com/a/30604658/3659227
sumber
Berikut pendekatan di Swift, menggunakan ekstensi UIButton untuk menambahkan IBInspectable, yang disebut highlightedBackgroundColor. Mirip dengan subclassing, tanpa memerlukan subclass.
Saya harap ini membantu.
sumber
Anda dapat menggunakan kategori ini yang menambahkan metode setBackgroundColor: forState:
https://github.com/damienromito/UIButton-setBackgroundColor-forState-
sumber
Solusi terbaik saya untuk Swift 3+ tanpa subclassing.
Dengan ekstensi ini, mudah untuk mengelola warna untuk status yang berbeda dan itu akan memudar warna normal Anda secara otomatis jika warna yang disorot tidak disediakan.
sumber
MEMPERBARUI:
Gunakan perpustakaan UIButtonBackgroundColor Swift.
TUA:
Gunakan bantuan di bawah ini untuk membuat gambar 1 px x 1 px dengan warna isi abu-abu:
atau warna isi RGB:
Kemudian, gunakan itu
image
untuk mengatur gambar latar belakang tombol:Pembantu
Catatan:
ACU
adalah awalan kelas dari Perpustakaan Static Cocoa Touch saya yang disebut Acani Utilities, di mana AC untuk Acani, dan U adalah untuk Utilitas.sumber
Coba ini !!!!
Untuk acara TouchedDown mengatur Satu warna dan untuk TouchUpInside mengatur yang lain.
sumber
- (IBAction)onButtonTouchDragOutside:(UIButton *)sender {
untuk memastikan warna tidak tetap hidup ketika pengguna secara tidak sengaja menarik jarinya dari tombol.Subkelas UIButton dan tambahkan properti yang dapat diperiksa untuk penggunaan yang nyaman (ditulis dalam Swift 3.0):
sumber
Anda dapat subkelas UIButton dan membuat forState yang bagus.
colourButton.h
colourButton.m
Catatan (Ini adalah contoh, saya tahu ada masalah dan di sini ada beberapa)
Saya telah menggunakan NSMutableDictionay untuk menyimpan UIColor untuk setiap negara bagian, saya harus melakukan konversi teks yang tidak menyenangkan untuk Key karena UIControlState bukan Int lurus yang bagus. Jika itu tempat Anda bisa init sebuah Array dengan banyak objek dan gunakan State sebagai indeks.
Karena ini Anda banyak mengalami kesulitan dengan misalnya tombol yang dipilih & dinonaktifkan, beberapa logika lebih diperlukan.
Masalah lain adalah jika Anda mencoba dan mengatur beberapa warna secara bersamaan, saya belum mencoba dengan tombol tetapi jika Anda dapat melakukan ini mungkin tidak bekerja
Saya berasumsi ini StoryBoard, tidak ada init, initWithFrame jadi tambahkan mereka jika Anda membutuhkannya.
sumber
Swift 5 , terima kasih @Maverick
sumber
Detail
Larutan
Pemakaian
sumber
Coba ini jika Anda memiliki gambar:
atau lihat apakah
showsTouchWhenHighlighted
cukup untuk Anda.sumber
Saya telah open-source subclass UIButton, STAButton , untuk mengisi lubang fungsionalitas yang menganga ini. Tersedia di bawah lisensi MIT. Bekerja untuk iOS 7+ (Saya belum menguji dengan versi iOS yang lebih lama).
sumber
Untuk mengatasi masalah ini, saya membuat Kategori untuk menangani
backgroundColor
Negara denganUIButtons
:ButtonBackgroundColor-iOS
Anda dapat menginstal kategori sebagai pod .
Mudah digunakan dengan Objective-C
Bahkan lebih mudah digunakan dengan Swift :
Saya sarankan Anda mengimpor pod dengan:
Menggunakan use_frameworks! di Podfile Anda membuatnya lebih mudah untuk menggunakan pod Anda dengan Swift dan objektif-C.
PENTING
Saya juga menulis Posting Blog dengan informasi lebih lanjut.
sumber
sumber
Gunakan https://github.com/swordray/UIButtonSetBackgroundColorForState
Tambahkan ke Podfile menggunakan CocoaPods
Cepat
Objektif-C
sumber
Coba
tintColor
:sumber
NSLog(@"%@", _button);
?UIButtonTypeCustom
.Berikut adalah kode dalam Swift untuk memilih status tombol:
Contoh:
sumber
Jatuhkan dan Anda siap:
* proerty dapat diatur dalam IB, dan jika tidak ada latar belakang yang disorot diatur, latar belakang tidak akan berubah ketika ditekan
sumber
UIIImage
Ekstensi di bawah ini akan menghasilkan objek gambar dengan parameter warna yang ditentukan.Contoh penggunaan untuk tombol dapat diterapkan untuk objek tombol sebagai:
sumber
sederhananya yang menggunakan UIButton Extension itu HANYA
dan gunakan ini
sumber
jika Anda tidak akan mengesampingkan hanya mengatur dua tindakan touchDown touchUpInside
sumber
Swift 3:
sumber
dalam Swift 5
Bagi mereka yang tidak ingin menggunakan latar belakang berwarna untuk mengalahkan negara yang dipilih
Cukup Anda dapat mengatasi masalah dengan menggunakan #Selector & if statement untuk mengubah warna UIButton untuk masing-masing negara secara mudah
Sebagai contoh:
sumber