Bagaimana cara menonaktifkan status kontrol sorotan sebuah UIButton?

147

Saya punya UIButton yang, ketika dipilih, tidak boleh berubah status saat disentuh. Perilaku default adalah untuk berada di UIControlStateHighlighted saat disentuh, dan ini membuat saya marah.

Saran?

kbanman
sumber

Jawaban:

313

Tombol Anda harus buttonTypediatur ke Kustom.

Di IB Anda dapat menghapus centang "Sorot menyesuaikan gambar".

Secara terprogram Anda dapat menggunakan theButton.adjustsImageWhenHighlighted = NO;

Opsi serupa juga tersedia untuk keadaan "dinonaktifkan".

Haydn
sumber
1
Apakah ada kemungkinan Anda tahu apa versi program ini? Saat ini saya sudah membuatnya bekerja dengan mematikannya dengan membuatnya dinonaktifkan, dan mengenakannya sebagai yang dipilih.
kbanman
99
uibutton.adjustsImageWhenHighlighted = TIDAK;
Haydn
43
Pastikan juga jenis tombol diatur ke KUSTOM. (Seperti yang disebutkan Mosib Asad dalam jawaban lain)
Vlad Lego
Bagus!!! hanya perubahan kecil dan jelas yang saya lewatkan !!! Saya telah menetapkan tipe kelas UIButton ke MyCustomClass tetapi forghet untuk mengubah yang ini. Jadi itu memberi efek disorot tombol yang tidak dipilih. Terima kasih sekali lagi.
Vinod Supnekar
38

Selain jawaban di atas untuk tidak menandai "sorot menyesuaikan gambar" di IB, pastikan bahwa jenis tombol diatur KUSTOM.

Mosib Asad
sumber
2
Ini adalah bagian yang hilang: jenis tombol KUSTOM. Terima kasih!
JOM
1
Bagaimana jika saya ingin tetap sebagai UIButton Sistem? saya tidak bisa menghapus highlight menyesuaikan gambar?
Amjad Husseini
36

Ini akan bekerja untuk Anda:

[button setBackgroundImage:[UIImage imageNamed:@"button_image"] forState:UIControlStateNormal];
[button setBackgroundImage:[UIImage imageNamed:@"button_image_selected"] forState:UIControlStateSelected];
[button setBackgroundImage:[UIImage imageNamed:@"button_image_selected"] forState:UIControlStateSelected | UIControlStateHighlighted];

Baris ke-3 adalah triknya di sini ...

Ini berfungsi sama untuk mengatur gambar / backgroundImage

Manish Ahuja
sumber
1
Ini bekerja sempurna untuk saya. The adjustsImageWhenHighlightedmilik UIButtontampaknya hanya mempengaruhi gambar latar belakang.
Michael Thiel
Ketahuilah, bahwa jika memutuskan untuk menetapkan gambar ke 'keadaan dinonaktifkan', Anda tidak memanggil setBackgroundImage. Sebagai gantinya, Anda harus melakukan [tombol setImage berikut: image forState: UIControlStateDisabled]; Perlu diketahui juga, bahwa seperti yang disebutkan di utas ini, properti AdjustsImageWhenHighlighted UIButton hanya mempengaruhi gambar latar belakang.
HamasN
26
adjustsImageWhenHighlighted = NO;
Ketan
sumber
23
button.adjustsImageWhenDisabled = NO;

sama-sama berguna untuk penampilan Anda sendiri dari tombol dinonaktifkan.

Tim
sumber
5

Bergantung pada perubahan apa dari default ke keadaan tombol yang disorot, Anda dapat memanggil beberapa metode untuk mengaturnya ke apa yang Anda butuhkan. Jadi jika perubahan gambar bisa Anda lakukan

[myButton setImage:[myButton imageForState:UIControlStateNormal] forState:UIControlStateHighlighted];

Jika teks berubah Anda bisa melakukannya

[myButton setTitle:[myButton titleForState:UIControlStateNormal] forState:UIControlStateHighlighted];

fungsi serupa lainnya:

- (void)setTitleColor:(UIColor *)color forState:(UIControlState)state

- (void)setTitleShadowColor:(UIColor *)color forState:(UIControlState)state

Dimitris
sumber
setTitleColor yang saya butuhkan untuk menonaktifkan highlight pada teks
uibutton
3

OK, ini solusi mudah jika ini cocok untuk Anda, setelah seminggu membenturkan kepalaku, akhirnya terpikir oleh saya untuk hanya menetapkan highlight = NO untuk baris pertama metode IBAction untuk TouchUpInside atau TouchDown, atau apa pun yang berfungsi. Bagi saya itu baik-baik saja di TouchUpInside.

-(IBAction)selfDismiss:(id)sender {

    self.btnImage.highlighted = NO;

    NSLog(@"selfDismiss");

    etc, etc, etc.

}
disanabuckley
sumber
3

Untuk Pengembang Swifty -

yourButton.adjustsImageWhenHighlighted = false
iDeveloper
sumber
3

Swift 3+

button.adjustsImageWhenHighlighted = false

button.adjustsImageWhenDisabled = false
yuanjilee
sumber
2

hanya dua hal:

UIButton *btnTransparentComponent = [UIButton buttonWithType:UIButtonTypeCustom];
btnTransparentComponent.adjustsImageWhenHighlighted = NO;
Alok
sumber
2

Saya memiliki masalah yang sama dan menemukan bahwa "hapus centang" Menghapus Konten Grafik dalam pembangun antarmuka memperbaiki masalah saya

masukkan deskripsi gambar di sini

Jeff
sumber
2

buat tombol Anda Ketik - "Kustom" dan Hapus centang - Sorot Menyesuaikan gambar dan Anda selesai.

Khushboo
sumber
-3

hindari untuk mengatur Line Break to Klip UIButton , gunakan sebaliknya Truncate Middle standar

masukkan deskripsi gambar di sini

János
sumber