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?

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".


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.


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


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


23
button.adjustsImageWhenDisabled = NO;

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


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


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.

}

3

Untuk Pengembang Swifty -

yourButton.adjustsImageWhenHighlighted = false

3

Swift 3+

button.adjustsImageWhenHighlighted = false

button.adjustsImageWhenDisabled = false

2

hanya dua hal:

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

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


2

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


-3

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

masukkan deskripsi gambar di sini

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.