Używam nowego UIAlertController do wyświetlania alertów. Mam ten kod:
// nil titles break alert interface on iOS 8.0, so we'll be using empty strings
UIAlertController *alert = [UIAlertController alertControllerWithTitle: title == nil ? @"": title message: message preferredStyle: UIAlertControllerStyleAlert];
UIAlertAction *defaultAction = [UIAlertAction actionWithTitle: cancelButtonTitle style: UIAlertActionStyleCancel handler: nil];
[alert addAction: defaultAction];
UIViewController *rootViewController = [UIApplication sharedApplication].keyWindow.rootViewController;
[rootViewController presentViewController:alert animated:YES completion:nil];
Teraz chcę zmienić tytuł i czcionkę wiadomości, kolor, rozmiar itd. Jak najlepiej to zrobić?
Edycja: powinienem wstawić cały kod. Stworzyłem kategorię dla UIView, w której mogłem wyświetlać odpowiedni alert dla wersji iOS.
@implementation UIView (AlertCompatibility)
+( void )showSimpleAlertWithTitle:( NSString * )title
message:( NSString * )message
cancelButtonTitle:( NSString * )cancelButtonTitle
{
float iOSVersion = [[UIDevice currentDevice].systemVersion floatValue];
if (iOSVersion < 8.0f)
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle: title
message: message
delegate: nil
cancelButtonTitle: cancelButtonTitle
otherButtonTitles: nil];
[alert show];
}
else
{
// nil titles break alert interface on iOS 8.0, so we'll be using empty strings
UIAlertController *alert = [UIAlertController alertControllerWithTitle: title == nil ? @"": title
message: message
preferredStyle: UIAlertControllerStyleAlert];
UIAlertAction *defaultAction = [UIAlertAction actionWithTitle: cancelButtonTitle
style: UIAlertActionStyleCancel
handler: nil];
[alert addAction: defaultAction];
UIViewController *rootViewController = [UIApplication sharedApplication].keyWindow.rootViewController;
[rootViewController presentViewController:alert animated:YES completion:nil];
}
}
ios
objective-c
ios8
uialertview
uialertcontroller
Libor Zapletal
źródło
źródło
DISCLAIMER:
Do każdego, kto czyta poniższe odpowiedzi. Apple odrzuci Twoje aplikacje. Jeśli zazwyczaj korzystasz z prywatnych interfejsów API. A w poniższych odpowiedziach TO CO SIĘ DZIEJE ...Odpowiedzi:
Nie jestem pewien, czy jest to sprzeczne z prywatnymi interfejsami API / właściwościami, ale używanie KVC działa dla mnie na ios8
Dla przypomnienia, można również zmienić czcionkę akcji alarmowej, korzystając z tych prywatnych interfejsów API. Ponownie, może to spowodować odrzucenie aplikacji, nie próbowałem jeszcze przesłać takiego kodu.
Dla Swift 4.2 w XCode 10 i nowszych ostatnie 2 linie to teraz:
źródło
attributedTitle
dla tytułu iattributedMessage
wiadomości. Nie jestem pewien, czy to najlepsze rozwiązanie, ale na razie wystarczy dla mnie.UIAlertController
. Jak można zrobić to samo zUIAlertAction
?Możesz zmienić kolor przycisku, stosując kolor tinty do UIAlertController.
W systemie iOS 9, jeśli kolor tinta okna został ustawiony na niestandardowy kolor, musisz zastosować kolor tinta zaraz po przedstawieniu alertu. W przeciwnym razie kolor odcień zostanie zresetowany do niestandardowego koloru odcienia okna.
źródło
Możesz zmienić kolor tekstu przycisku za pomocą tego kodu:
Może to ci pomoże.
źródło
Wynik
źródło
Szybkie tłumaczenie odpowiedzi @ dupuis2387. Opracowano składnię, aby ustawić
UIAlertController
kolor i czcionkę tytułu za pomocą KVC za pomocąattributedTitle
klawisza.źródło
tintColor
naview
lub przezappearanceWhenContainedIn
, ale odcień znika, gdy tylko go dotkniesz. Wciąż jednak szukam odpowiedzi.self.presentViewController(alertController, animated: true, completion: nil)
czy możemy zmienić czcionkę przycisku „OK”?Użyj
UIAppearance
protokołu. Przykład ustawienia czcionki - utwórz kategorię do rozszerzeniaUILabel
:I jego zastosowanie:
Przetestowane i działające ze stylem
UIAlertControllerStyleActionSheet
, ale myślę, że też będzie działaćUIAlertControllerStyleAlert
.PS Lepiej sprawdź dostępność klas zamiast wersji iOS:
źródło
Użyj
UIAppearance
protokołu. Zrób więcej hacków,appearanceFont
aby zmienić czcionkęUIAlertAction
.Utwórz kategorię dla
UILabel
UILabel + FontAppearance.h
UILabel + FontAppearance.m
Stosowanie:
Dodaj
[[UILabel appearanceWhenContainedIn:UIAlertController.class, nil] setAppearanceFont:nil];
w
AppDelegate.m
, aby pracować dla wszystkichUIAlertController
.źródło
if (self.font.pointSize == 13 && isBold) {
UIAlertAction
. Ale o ile wiem,UIAlertAction
nie używaUILabel
. UżywaNSString
. github.com/nst/iOS-Runtime-Headers/blob/… Nie wiem, jak można dostosować czcionkę do plikuNSString
.Swift 5 i 5.1 . Utwórz osobny plik i umieść tam kod dostosowywania UIAlertController
Teraz w każdej akcji Pokaż alert
Wynik
źródło
Używam tego.
Dodaj jedną linię (AppDelegate) i działa dla wszystkich UIAlertController.
źródło
Szybki 4
Przykład niestandardowej czcionki w tytule. To samo dotyczy innych składników, takich jak komunikat lub akcje.
źródło
Oto rozszerzenie dla Swift 4.1 i Xcode 9.4.1:
źródło
Właśnie ukończyłem wymianę
UIAlertController
. To jest jedyna rozsądna droga, myślę:Stary
Oto moja metoda w języku Swift, która zbiera wiele informacji z odpowiedzi tutaj
W niektórych sytuacjach działa to doskonale, w innych jest to kompletna porażka (kolory odcieni nie pokazują się zgodnie z oczekiwaniami).
źródło
Możesz użyć zewnętrznej biblioteki, takiej jak PMAlertController, bez stosowania obejścia, w której możesz zastąpić niemożliwy do dostosowania kontroler UIAlertController firmy Apple z super konfigurowalnym alertem.
Kompatybilny z Xcode 8, Swift 3 i Objective-C
Cechy:
źródło
actionButton.titleLabel.lineBreakMode = NSLineBreakByWordWrapping
działa dobrze.Występuje problem z ustawieniem odcienia na podglądzie po prezentacji; nawet jeśli zrobisz to w bloku uzupełniania presentViewController: animated: Complete:, powoduje to efekt migotania koloru tytułów przycisków. To jest niechlujne, nieprofesjonalne i całkowicie niedopuszczalne.
Inne przedstawione rozwiązania zależą od statycznej hierarchii widoków, czego Apple nie lubi. Spodziewaj się, że te rozwiązania zawiodą w przyszłych wersjach systemu iOS.
Jedynym niezawodnym sposobem rozwiązania tego problemu i zrobienia tego wszędzie, jest dodanie kategorii do UIAlertController i przełączenie widokuWillAppear.
Nagłówek:
Implementacja:
Dodaj .pch (prekompilowany nagłówek) do projektu i dołącz kategorię:
Upewnij się, że poprawnie zarejestrowałeś swój PC w projekcie i będzie zawierał metody kategorii w każdej klasie, która używa UIAlertController.
Następnie w metodzie didFinishLaunchingWithOptions delegatów aplikacji zaimportuj kategorię i wywołaj
i automatycznie rozprzestrzeni się na każdą instancję UIAlertController w Twojej aplikacji, niezależnie od tego, czy została uruchomiona przez Twój kod, czy przez kogokolwiek innego.
To rozwiązanie działa zarówno na iOS 8.X, jak i iOS 9.X i brakuje mu migotania po zmianie odcienia podejścia po prezentacji. Jest również całkowicie agnostyczny w odniesieniu do hierarchii widoków widoków podrzędnych kontrolera UIAlertController.
Miłego hakowania!
źródło
Proszę, znajdź to kategorię. Jestem w stanie zmienić FONT i kolor UIAlertAction i UIAlertController.
Posługiwać się:
źródło
W Swift 4.1 i Xcode 10
źródło
self.present(alertController, animated: true)
lubself.present(alert, animated: true)
.Rozwiązanie / Hack dla iOS9
źródło
Pracuję dla Urban Outfitters. Mamy moduł open source
URBNAlert
, którego używaliśmy we wszystkich naszych aplikacjach. Jest oparty naUIAlertController
, ale jest wysoce konfigurowalny.Źródło jest tutaj: https://github.com/urbn/URBNAlert
Lub po prostu zainstaluj przez kapsułę, umieszczając
URBNAlert
w swoim pliku PodfileOto przykładowy kod:
źródło
Aby zmienić kolor jednego przycisku, takiego jak CANCEL, na czerwony, możesz użyć tej właściwości stylu o nazwie UIAlertActionStyle.destructive:
źródło
W przypadku systemu iOS 9.0 i nowszych użyj tego kodu w delegacie aplikacji
źródło
źródło
Trochę niezgrabne, ale teraz działa to dla mnie, aby ustawić kolory tła i tekstu. Znalazłem to tutaj .
źródło
Stworzyłem jedną metodę celu-C
Kod działa doskonale w Xcode 8.3.1. Możesz dostosować zgodnie z wymaganiami.
źródło
Po prostu używam tego rodzaju żądania, pozornie i systemu, szczegóły są nieco inne, więc ... OC zrealizowało hermetyzację okna wyskakującego Alert i Arkusz.
Często spotykana w codziennych pracach rozwojowych potrzeba dodania cyfry do Alertów lub zmiany koloru przycisku, np. „Proste” żądanie, obecnie przynosi bardzo podobne elementy systemu i może w pełni zaspokoić zapotrzebowanie na niestandardowe elementy opakowania.
Github: https://github.com/ReverseScale/RSCustomAlertView
źródło