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.

pengguna2665539
sumber
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]; 
Chamira Fernando
sumber
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.

pengguna3099609
sumber
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)
Wilson
sumber
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];

Mick MacCallum
sumber
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];

DrDisc
sumber
9

Untuk cepat:

    let aButton = UIButton.buttonWithType(UIButtonType.Custom) as UIButton
Esqarrouth
sumber
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.

Ryan Heitner
sumber
3

Ini berhasil untuk saya

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

Catatan: Hapus gambar depan sebelum melakukan ini.

datha
sumber
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.

Rob Schlackman
sumber
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];
Alex
sumber
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];
Shane
sumber
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.

OhadM
sumber
1

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

rommex
sumber
0

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

Rajashekar
sumber
-1

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

let myButton = UIButton(type: .cutsom)
myButton.setImage(UIImage(data:myImageData), for: .normal)
Frank Eno
sumber