İOS 7'de UIButton görüntü sonuçlarını mavi düğme ile ayarlama


163

İOS 6 SDK'da, bir düğmenin içindeki bir görüntüyü görüntülemek için aşağıdaki kod satırlarını yazdım:

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];

Ancak şimdi Xcode 5 ve iOS 7 ile bu çalışmıyor. Düğme resmi içermiyor. Düğme mavi renkle doldurulur.


Düğmeye tıkladığınızda görüntü görünüyor mu?
JustAnotherCoder

Yanıtlar:


378

İOS7'de UIButtonTypeSystem NS_ENUM_AVAILABLE_IOS (7_0), // standart sistem düğmesi adı verilen yeni bir düğme türü var

.Xib dosyanızı kontrol edin ve düğme türünü Özel olarak değiştirin Resme bak

Bunu programlı olarak yapmak için şu satırı ekleyin viewDidLoad:

[UIButton buttonWithType:UIButtonTypeSystem]; 

2
[UIButton düğmesiWithType: UIButtonTypeSystem];
avuthless

57
Bu çözümün sistem renk tonunu kaldırdığını, ancak vurgulanan ve normal durumlar arasında sabit bir geçişle sonuçlandığını unutmayın. Sistem davranışını, animasyonları vb. Korumak istiyorsanız, ancak renk tonundan kurtulmak istiyorsanız, [myUIButton setImage: [[UIImage imageNamed: @"myButtonImage"] imageWithRenderingMode: UIImageRenderingModeAlwaysOriginal] forState: UIControlStateNormal];(düğme tipi IB'de "Sistem" olarak ayarlanmış olarak) deneyin .
JWK

Teşekkürler bu çok yardımcı oldu. Bizim durumumuzda, düğme şeffaf PNG'nin şekline bile kırpılıp renklendiriliyordu.
g_pass

Tanrım bunu iyi sakladılar değil mi ?!
Maury Markowitz

işe yarıyor :) u ur kodunda başka bir sorun olabilir. Xcode 6.1 bakarsanız, mevcut seçenekleri açıkça görebilirsiniz ..
Chamira Fernando

53

İOS 7, sağlanan görüntüyü düğmenin renk tonunu görüntülemek için bir Alfa maskesi olarak kullanıyor gibi görünüyor. Düğme türünü değiştirmek UIButtonTypeCustombenim için hile yaptı (teşekkürler user716216!). Benim durumumda olduğu gibi, arka plan resminiz varsa görüntüyü arka plan olarak ayarlamak her zaman işe yaramaz.


Teşekkür ederim! Orijinal kullanıcı cevap olarak kabul etmeyi unuttu.
jigzat

benim için çalışıyor, ancak sistemimde değişiklik benim durumum için çalışmıyor, tüm katkılarınız için teşekkürler
chings228

29

Hızlı 3, 4, 5:

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

24

Görüntünün orada olması için iyi bir şans var ve onu göremiyorsunuz. Düğmenin türünü olarak değiştirmeyi deneyin UIButtonTypeCustom. Bu işe yaramazsa, düğmenin arka plan rengini[UIColor clearColor];


9

Sorun TintColor. Varsayılan olarak, iOS her düğmeye mavi renk tonu atar. 3 yolla dolaşabilirsiniz.

  1. Renk tonunu değiştirin. [button setTintColor:[UIColor blackColor]]; Bu, resminizi istemediğiniz şekillerde renklendirebilir.

  2. Diğerlerinin önerdiği gibi, arka plan resmini ayarlayın. [button setBackgroundImage:[UIImage...]];

  3. Düğmenize bir UIImageView ekleyin.

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

[button addSubView:img];


9

Hızlı için:

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

6

Aynı sorunu yaşadım. Film şeridimde görüntü olmayan bir düğme vardı.

Daha sonra kodu kodda atayacağım.

IOS 7 geldi ve çok sayıda mavi resim aldım.

Çözünürlük basit ama kafa karıştırıcıydı. Film şeridinde herhangi bir görüntü atar ve daha sonra çalışma zamanında görüntüyü değiştirirsem iyi çalışır.

Kullanmayacak olsanız bile, film şeridinde her zaman bir başlangıç ​​resmi belirtmelisiniz.


3

Bu benim için çalıştı

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

Not: Bunu yapmadan önce ön resmi kaldırın.


arka plan resmi kaldırmak için lütfen !!
simbesi.com

3

Eski iplik, ama ben sadece aynı sorunu vardı çünkü ben chime istedim. Sorun sadece setBackgroundImage'ı çağırmanız gerektiğinde setImage'ı çağırmanızdı.


1

Verilen çözümlerin hiçbiri benim için çalışmadı. Storyboard'da bir başlangıç ​​resmi ayarlamazsanız, düğmenin görüntüsünü yine de kullanarak değiştirebilirsiniz.setBackgroundImage .

Örneğin, yalnızca küçük bir değişiklik gereklidir.

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

Bu soruna xcode'daki düğmenin mavi renk sorunu denir. Kodla düğme yaptığımızda, düğme varsayılan olarak mavi renk tonunu gösterir.Bu, hücrenin rengine göre renk tonunu siyah veya beyaza atayarak çözülebilir. Kod:

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
Rudra

1

Xcode 9.2 kullanarak yukarıdaki çözümlerin hiçbiri aradığım şey için işe yaramadı.

Orijinal görüntü oluşturma modu için film şeridinin içine yerleştirmem .normalve .selected UIControlStateresimler eklememe izin verecek bir çözüm arıyordum Swift dosyası içinde, hiçbir dize hazır görüntü isimlerine ilişkin bulunmalıdır, ama.

Temel olarak, kodunuzun içinde hikaye tablonuzun içine ayarladığınız görüntüyü durum için alacak .normalve yeniden .alwaysOriginal( .selecteddurum için aynı ) olarak yeniden oluşturacaksınız , o zaman (şimdi orijinal olarak işlenen ve ilgili devlet için renk tonu) ( .normalve .selectediçinde) sizinUIButton .

İşte burada:

// 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)

Bu şekilde düğme görüntü durumlarınızı ayarlayabilirsiniz ve görüntü adı değişecekse, kodunuzu etkilemez.


1

İOS 13'te - UIButton türünü Özel olarak tutarken Tint özelliğini Beyaz olarak ayarlayın


0

renk tonu renginin dört durumun tümü için (varsayılan, Vurgulanan, seçili, devre dışı) açık renk olması benim için çalıştı.


-1

In Swift 4 sayfanı başlatmak UIButtonve aşağıdaki gibi uyour görüntü Veri atayın:

let myButton = UIButton(type: .cutsom)
myButton.setImage(UIImage(data:myImageData), for: .normal)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.