Na iOS 6 SDK napisałem następujące wiersze kodu, aby wyświetlić obraz w przycisku:
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];
Ale teraz z Xcode 5 i iOS 7 to nie działa. Przycisk nie zawiera obrazu. Przycisk jest wypełniony kolorem niebieskim.
Odpowiedzi:
W iOS7 pojawił się nowy typ przycisku o nazwie UIButtonTypeSystem NS_ENUM_AVAILABLE_IOS (7_0), // standardowy przycisk systemowy
Sprawdź plik .xib i zmień typ przycisku na Niestandardowy
Aby zrobić to programowo, dodaj ten wiersz do
viewDidLoad
:źródło
[myUIButton setImage: [[UIImage imageNamed: @"myButtonImage"] imageWithRenderingMode: UIImageRenderingModeAlwaysOriginal] forState: UIControlStateNormal];
(z typem przycisku ustawionym na „System” w IB).Wygląda na to, że iOS 7 używa obrazu dostarczonego tylko jako maski alfa do wyświetlania koloru odcienia przycisku. Zmiana typu przycisku, aby
UIButtonTypeCustom
załatwić sprawę (dzięki user716216!). Ustawienie obrazu jako tła nie zawsze działa, jeśli masz już obraz tła, tak jak w moim przypadku.źródło
Swift 3, 4, 5:
źródło
Jest duża szansa, że obraz tam jest i po prostu go nie widać. Spróbuj zmienić typ przycisku na
UIButtonTypeCustom
. Jeśli to nie zadziała, ustaw kolor tła przycisku na[UIColor clearColor];
źródło
Problemem jest TintColor. Domyślnie iOS rzuca niebieski odcień na każdy przycisk. Możesz obejść to na 3 sposoby.
Zmień kolor odcienia.
[button setTintColor:[UIColor blackColor]];
Może to pokolorować Twój obraz w sposób, w jaki nie chcesz.Jak większość sugerowała, ustaw obraz tła.
[button setBackgroundImage:[UIImage...]];
Dodaj UIImageView do swojego przycisku.
UIImageView * img = [[UIImageView alloc] initWithImage:[UIImage...]];
[button addSubView:img];
źródło
Dla szybkiego:
źródło
Miałem ten sam problem. Na moim storyboardzie miałem przycisk bez obrazu.
Następnie przypisałbym obraz w kodzie.
Pojawił się IOS 7 i otrzymałem dużo niebieskich obrazów.
Rozwiązanie było proste, ale zagmatwane. Jeśli przypiszę dowolny obraz w serii ujęć, a następnie zmienię obraz w czasie wykonywania, działa dobrze.
Zawsze musisz określić obraz początkowy w serii ujęć, nawet jeśli nie zamierzasz go używać.
źródło
To zadziałało dla mnie
Uwaga: usuń przedni obraz zanim to zrobisz.
źródło
Stary wątek, ale chciałem się wtrącić, ponieważ miałem ten sam problem. Problem polegał na tym, że wywołujesz setImage, kiedy powinieneś wywołać setBackgroundImage.
źródło
Żadne z podanych rozwiązań nie działało dla mnie. Jeśli nie ustawisz obrazu początkowego w Storyboard, nadal możesz zmienić obraz przycisku za pomocą
setBackgroundImage
.Na przykład potrzebna jest tylko niewielka zmiana.
źródło
Ten problem jest nazywany problemem niebieskiego koloru przycisku w xcode. Kiedy tworzymy przycisk po kodzie, przycisk domyślnie pokazuje niebieski odcień.Można to rozwiązać, przypisując kolor odcień do czerni lub bieli zgodnie z kolorem komórki. Kod to:
źródło
Używając Xcode 9.2 żadne z powyższych rozwiązań nie działało dla tego, czego szukałem.
Szukałem rozwiązania, które pozwoli mi ustawić
.normal
i.selected
UIControlState
obrazy wewnątrz scenorysu dla ich oryginalnego trybu renderowania , ale w pliku Swift nie powinny istnieć żadne literały ciągów dotyczące nazw obrazów.Zasadniczo w kodzie otrzymasz obraz, który ustawisz w swojej serii ujęć dla
.normal
stanu i ponownie wyrenderujesz go jako.alwaysOriginal
(Tak samo dla.selected
stanu), a następnie ustawisz ten obraz (który jest teraz renderowany jako oryginalny i nie będzie miał na niego wpływu odcień) dla odpowiedniego stanu (.normal
i.selected
) twojegoUIButton
.Oto ona:
W ten sposób możesz ustawić stany obrazu przycisku, a jeśli nazwa obrazu ulegnie zmianie, nie wpłynie to na kod.
źródło
W iOS 13 - po prostu ustaw właściwość Tint na White, zachowując typ UIButton jako Custom
źródło
ustawienie koloru tinty jako clearcolor dla wszystkich czterech stanów (domyślny, podświetlony, wybrany, wyłączony) działało dla mnie.
źródło
W Swift 4 zainicjalizuj
UIButton
i przypisz dane obrazu w następujący sposób:źródło