Pengaturan gambar UIButton menghasilkan tombol biru di iOS 7


163

Di iOS 6 SDK saya menulis baris kode berikut untuk menampilkan gambar di dalam tombol:

NSURL *thumbURL2 = [NSURL URLWithString:@"http://example.com/thumbs/2.jpg"];
NSData *thumbData2 = [NSData dataWithContentsOfURL:thumbURL2];
UIImage *thumb2 = [UIImage imageWithData:thumbData2];
[btn2 setImage:thumb2 forState:UIControlStateNormal];
[self.view addSubview:btn2];

Tetapi sekarang dengan Xcode 5 dan iOS 7 ini tidak berfungsi. Tombol tidak mengandung gambar. Tombol diisi dengan warna biru.


Apakah gambar muncul ketika Anda mengklik tombol?
JustAnotherCoder

Jawaban:


378

Di iOS7 ada jenis tombol baru yang disebut UIButtonTypeSystem NS_ENUM_AVAILABLE_IOS (7_0), // tombol sistem standar

Periksa file .xib Anda dan ubah jenis tombol menjadi Kustom Lihatlah gambarnya

Untuk melakukan ini secara pemrograman, tambahkan baris ini ke viewDidLoad:

[UIButton buttonWithType:UIButtonTypeSystem]; 

2
[Tombol UIButtonWithType: UIButtonTypeSystem];
avuthless

57
Perhatikan bahwa solusi ini tidak menghilangkan warna warna sistem, tetapi juga menghasilkan transisi yang sulit antara kondisi yang disorot dan normal. Jika Anda ingin mempertahankan perilaku sistem, animasi, dll., Tetapi ingin menghilangkan warna tint, coba [myUIButton setImage: [[UIImage imageNamed: @"myButtonImage"] imageWithRenderingMode: UIImageRenderingModeAlwaysOriginal] forState: UIControlStateNormal];(dengan jenis tombol yang diatur ke "Sistem" di IB).
JWK

Terima kasih, ini sangat membantu. Dalam kasus kami, tombol itu bahkan memotong ke bentuk PNG transparan dan kemudian pewarnaan.
g_pass

Ya ampun mereka menyembunyikan yang baik bukan ?!
Maury Markowitz

berfungsi :) Anda mungkin memiliki beberapa masalah lain dalam kode ur Anda. Jika Anda melihat Xcode 6.1, Anda dapat dengan jelas melihat opsi yang tersedia ..
Chamira Fernando

53

Tampaknya iOS 7 menggunakan gambar yang disediakan hanya sebagai topeng Alpha untuk menampilkan warna warna tombol. Mengubah jenis tombol untuk UIButtonTypeCustommelakukan trik untuk saya (terima kasih user716216!). Mengatur gambar sebagai latar belakang tidak selalu berfungsi jika Anda sudah memiliki gambar latar belakang, seperti kasus saya.


Terima kasih! Pengguna asli lupa menerimanya sebagai jawabannya.
jigzat

ini bekerja untuk saya, tetapi perubahan ke sistem tidak berfungsi untuk kasus saya, terima kasih semua kontribusimu
chings228

29

Swift 3, 4, 5:

let image = UIImage(named: "my-image")
myButton.setImage(image.withRenderingMode(.alwaysOriginal), for: .normal)

24

Ada kemungkinan bagus bahwa gambar itu ada di sana dan Anda tidak bisa melihatnya. Coba ubah jenis tombol menjadi UIButtonTypeCustom. Jika itu tidak berhasil, atur warna latar belakang tombol ke[UIColor clearColor];


9

Masalahnya adalah TintColor. Secara default, iOS melempar warna warna biru di atas setiap tombol. Anda dapat mengatasinya melalui 3 cara.

  1. Ubah warna rona. [button setTintColor:[UIColor blackColor]]; Ini dapat mewarnai gambar Anda dengan cara yang tidak Anda inginkan.

  2. Seperti kebanyakan saran lainnya, atur gambar latar belakang. [button setBackgroundImage:[UIImage...]];

  3. Tambahkan UIImageView ke tombol Anda.

UIImageView * img = [[UIImageView alloc] initWithImage:[UIImage...]];

[button addSubView:img];


9

Untuk cepat:

    let aButton = UIButton.buttonWithType(UIButtonType.Custom) as UIButton

6

Saya memiliki masalah yang sama. Di storyboard saya, saya memiliki tombol tanpa gambar.

Saya kemudian akan menetapkan gambar dalam kode.

IOS 7 datang dan saya mendapat banyak gambar biru.

Resolusi itu sederhana namun membingungkan. Jika saya menetapkan gambar apa pun di storyboard dan kemudian mengubah gambar pada saat run time berfungsi dengan baik.

Anda selalu harus menentukan gambar awal di storyboard bahkan jika Anda tidak akan menggunakannya.


3

Ini berhasil untuk saya

[myButton1 setBackgroundImage:[UIImage imageNamed:@"phones.png"] forState:UIControlStateNormal];

Catatan: Hapus gambar depan sebelum melakukan ini.


bagaimana cara menghapus gambar latar belakang !!
simbesi.com

3

Utas lama, tetapi saya ingin berpadu karena saya hanya memiliki masalah yang sama. Masalahnya adalah Anda menelepon setImage ketika Anda harus memanggil setBackgroundImage.


1

Tak satu pun dari solusi yang diberikan bekerja untuk saya. Jika Anda tidak menetapkan gambar awal di Storyboard, Anda masih dapat mengubah gambar tombol dengan menggunakan setBackgroundImage.

Sebagai contoh Anda, hanya perubahan kecil yang diperlukan.

NSURL *thumbURL2 = [NSURL URLWithString:@"http://example.com/thumbs/2.jpg"];
NSData *thumbData2 = [NSData dataWithContentsOfURL:thumbURL2];
UIImage *thumb2 = [UIImage imageWithData:thumbData2];
[btn2 setBackgroundImage:thumb2 forState:UIControlStateNormal];
[self.view addSubview:btn2];

1

Masalah ini disebut masalah warna biru dari tombol dalam xcode. Ketika kita membuat tombol dengan kode tombol menunjukkan warna warna biru secara default. Ini dapat diselesaikan dengan menetapkan warna warna menjadi hitam atau putih sesuai dengan warna sel Anda. Kode tersebut adalah:

UIImage *closebtnimg = [UIImage imageNamed:@"icon_uncheck.png"];
 UIImage *closebtnimg1 = [UIImage imageNamed:@"icon_checked.png"];

Custombutton *button = [Custombutton buttonWithType:UIButtonTypeRoundedRect];
[button setFrame:CGRectMake(52, 66, 25, 24)];
[button setBackgroundImage:closebtnimg forState:UIControlStateNormal];
[button setBackgroundImage:closebtnimg1 forState:UIControlStateSelected];
[button setTintColor:[UIColor whiteColor]];
[cell.contentView addSubview:button];
[button addTarget:self action:@selector(changeImage:)  forControlEvents:UIControlEventTouchUpInside];

ini cukup membantu @Shane
Rudra

1

Menggunakan Xcode 9.2 tidak ada solusi di atas yang bekerja untuk apa yang saya cari.

Saya sedang mencari solusi yang akan memungkinkan saya mengatur .normaldan .selected UIControlStategambar di dalam storyboard untuk mode rendering asli mereka , tetapi, di dalam file Swift, tidak ada string string yang seharusnya ada mengenai nama-nama gambar.

Pada dasarnya, di dalam kode Anda, Anda akan mendapatkan gambar yang Anda atur di dalam storyboard Anda untuk .normalnegara dan render kembali sebagai .alwaysOriginal(Sama untuk .selectednegara), lalu, Anda akan mengatur gambar itu (yang sekarang diterjemahkan sebagai asli dan tidak akan terpengaruh oleh warna) untuk negara bagian yang relevan ( .normaldan .selected) Anda UIButton.

Ini dia:

// Get your .normal image (you set via your storyboard) and render it as original
let unselectedImage = yourButton.image(for: .normal)?.withRenderingMode(.alwaysOriginal)
// Set your normal image but this time rendered as original
yourButton.setImage(unselectedImage, for: .normal)
// Same for selected state
let selectedImage = yourButton.image(for: .selected)?.withRenderingMode(.alwaysOriginal)
yourButton.setImage(selectedImage, for: .selected)

Dengan cara ini Anda dapat mengatur status gambar tombol Anda dan jika nama gambar akan berubah, itu tidak akan mempengaruhi kode Anda.


1

Di iOS 13 - cukup atur properti Tint ke White, sambil tetap menggunakan jenis UIButton sebagai Kustom


0

menjadikan warna rona sebagai warna jernih untuk keempat negara bagian (Default, Highlighted, terpilih, dinonaktifkan) bekerja untuk saya.


-1

Di Swift 4 , inisialisasi UIButtondan tetapkan Data gambar Anda sebagai berikut:

let myButton = UIButton(type: .cutsom)
myButton.setImage(UIImage(data:myImageData), for: .normal)
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.