Ich verwende den neuen UIAlertController zum Anzeigen von Warnungen. Ich habe diesen Code:
// 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];
Jetzt möchte ich Titel, Schriftart, Farbe, Größe usw. ändern. Was ist der beste Weg, dies zu tun?
Bearbeiten: Ich sollte ganzen Code einfügen. Ich habe eine Kategorie für UIView erstellt, in der die richtige Warnung für die iOS-Version angezeigt werden kann.
@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
quelle
quelle
DISCLAIMER:
An alle, die die folgenden Antworten lesen. Apple lehnt Ihre App (s) ab. Wenn Sie dazu neigen, private APIs zu verwenden. Und in den folgenden Antworten ist das, was passiert.Antworten:
Ich bin mir nicht sicher, ob dies gegen private APIs / Eigenschaften verstößt, aber die Verwendung von KVC funktioniert für mich auf ios8
Für den Datensatz ist es auch möglich, die Schriftart der Warnungsaktion mithilfe dieser privaten APIs zu ändern. Auch hier kann es sein, dass Ihre App abgelehnt wird. Ich habe noch nicht versucht, einen solchen Code einzureichen.
Für Swift 4.2 in XCode 10 und höher lauten die letzten beiden Zeilen jetzt:
quelle
attributedTitle
für Titel undattributedMessage
für Nachricht. Ich bin mir nicht sicher, ob es die beste Lösung ist, aber im Moment ist es gut genug für mich.UIAlertController
. Wie kann man das auch machenUIAlertAction
?Sie können die Tastenfarbe ändern, indem Sie einem UIAlertController eine Farbtonfarbe zuweisen.
Wenn unter iOS 9 die Fenstertönungsfarbe auf eine benutzerdefinierte Farbe eingestellt wurde, müssen Sie die Tönungsfarbe direkt nach dem Anzeigen der Warnung anwenden. Andernfalls wird die Farbtonfarbe auf Ihre benutzerdefinierte Fenstertönungsfarbe zurückgesetzt.
quelle
Mit diesem Code können Sie die Farbe des Schaltflächentexts ändern:
Vielleicht hilft dir das.
quelle
Ausgabe
quelle
Eine schnelle Übersetzung der Antwort @ dupuis2387. Erarbeitete die Syntax, um die
UIAlertController
Farbe und Schriftart des Titels über KVC mit derattributedTitle
Taste festzulegen .quelle
tintColor
aufview
oder über einstellenappearanceWhenContainedIn
, aber der Farbton verschwindet, sobald Sie ihn berühren. Immer noch auf der Suche nach Antworten.self.presentViewController(alertController, animated: true, completion: nil)
wir die Schriftart der Schaltfläche "OK" ändern?Verwenden
UIAppearance
Protokoll. Beispiel zum Festlegen einer Schriftart - Erstellen Sie eine Kategorie zum ErweiternUILabel
:Und seine Verwendung:
Getestet und mit Stil gearbeitet
UIAlertControllerStyleActionSheet
, aber ich denke, es wird auch funktionierenUIAlertControllerStyleAlert
.PS Überprüfen Sie besser die Klassenverfügbarkeit anstelle der iOS-Version:
quelle
Verwenden
UIAppearance
Protokoll. Machen Sie mehr Hacks mitappearanceFont
, um die Schriftart für zu ändernUIAlertAction
.Erstellen Sie eine Kategorie für
UILabel
UILabel + FontAppearance.h
UILabel + FontAppearance.m
Verwendung:
hinzufügen
[[UILabel appearanceWhenContainedIn:UIAlertController.class, nil] setAppearanceFont:nil];
in
AppDelegate.m
, um es für alle arbeitenUIAlertController
.quelle
if (self.font.pointSize == 13 && isBold) {
UIAlertAction
. Aber soweit ich das beurteilen kann,UIAlertAction
wird kein a verwendetUILabel
. Es verwendet eineNSString
. github.com/nst/iOS-Runtime-Headers/blob/… Ich weiß nicht, wie Sie die Schriftart für eine anpassen könnenNSString
.Swift 5 und 5.1 . Erstellen Sie eine separate Datei und geben Sie dort den UIAlertController-Anpassungscode ein
Jetzt Bei jeder Aktion Alarm anzeigen
Ergebnis
quelle
Ich benutze es.
Fügen Sie eine Zeile hinzu (AppDelegate) und funktioniert für alle UIAlertController.
quelle
Swift 4
Beispiel für eine benutzerdefinierte Schriftart auf dem Titel. Gleiches gilt für andere Komponenten wie Nachrichten oder Aktionen.
quelle
Hier ist eine Erweiterung für Swift 4.1 und Xcode 9.4.1:
quelle
Ich habe gerade einen Ersatz für abgeschlossen
UIAlertController
. Dies ist der einzig vernünftige Weg, denke ich:Alt
Hier ist meine Methode in Swift, die viele Informationen aus den Antworten hier zusammenfasst
Dies funktioniert in einigen Situationen perfekt und in anderen ist es ein Totalausfall (die Farbtöne werden nicht wie erwartet angezeigt).
quelle
Sie können eine externe Bibliothek wie PMAlertController verwenden ohne verwenden, wobei Sie den nicht anpassbaren UIAlertController von Apple durch eine super anpassbare Warnung ersetzen können.
Kompatibel mit Xcode 8, Swift 3 und Objective-C
Eigenschaften:
quelle
actionButton.titleLabel.lineBreakMode = NSLineBreakByWordWrapping
funktioniert gut.Es gibt ein Problem beim Festlegen der Farbtonfarbe in der Ansicht nach der Präsentation. Selbst wenn Sie dies im Vervollständigungsblock von presentViewController tun: animiert: Vervollständigung:, verursacht dies einen Flackereffekt auf die Farbe der Schaltflächentitel. Das ist schlampig, unprofessionell und völlig inakzeptabel.
Andere vorgestellte Lösungen hängen davon ab, dass die Ansichtshierarchie statisch bleibt, was Apple nicht gerne tut. Erwarten Sie, dass diese Lösungen in zukünftigen Versionen von iOS fehlschlagen.
Der einzige sichere Weg, um dieses Problem zu lösen und es überall zu tun, besteht darin, UIAlertController eine Kategorie hinzuzufügen und viewWillAppear zu wechseln.
Der Header:
Die Umsetzung:
Fügen Sie Ihrem Projekt eine .pch (vorkompilierte Kopfzeile) hinzu und fügen Sie die Kategorie hinzu:
Stellen Sie sicher, dass Sie Ihre pch ordnungsgemäß im Projekt registrieren. Sie enthält die Kategoriemethoden in jeder Klasse, die den UIAlertController verwendet.
Importieren Sie dann in der didFinishLaunchingWithOptions-Methode Ihrer App-Delegierten Ihre Kategorie und rufen Sie sie auf
und es wird automatisch an jede einzelne Instanz von UIAlertController in Ihrer App weitergegeben, unabhängig davon, ob sie von Ihrem Code oder von anderen gestartet wird.
Diese Lösung funktioniert sowohl für iOS 8.X als auch für iOS 9.X und es fehlt das Flimmern des Ansatzes zur Änderung des Farbtons nach der Präsentation. Es ist auch in Bezug auf die Ansichtshierarchie der Unteransichten des UIAlertControllers völlig agnostisch.
Viel Spaß beim Hacken!
quelle
Bitte finden Sie diese Kategorie. Ich kann FONT und Color von UIAlertAction und UIAlertController ändern.
Verwenden:
quelle
In Swift 4.1 und Xcode 10
quelle
self.present(alertController, animated: true)
oderself.present(alert, animated: true)
.Lösung / Hack für iOS9
quelle
Ich arbeite für Urban Outfitters. Wir haben einen Open Source Pod, den
URBNAlert
wir in all unseren Apps verwendet haben. Es basiert aufUIAlertController
, ist aber hochgradig anpassbar.Quelle ist hier: https://github.com/urbn/URBNAlert
Oder installieren Sie einfach durch den Pod, indem Sie ihn
URBNAlert
in Ihre Pod-Datei einfügenHier ist ein Beispielcode:
quelle
Um die Farbe einer Schaltfläche wie CANCEL in die rote Farbe zu ändern, können Sie diese Stileigenschaft mit dem Namen UIAlertActionStyle.destructive verwenden:
quelle
Verwenden Sie diesen Code für iOS 9.0 und höher in App Delegate
quelle
quelle
Ein bisschen klobig, aber das funktioniert gerade für mich, um Hintergrund- und Textfarben festzulegen. Ich habe es hier gefunden .
quelle
Ich habe eine Methode Ziel-C erstellt
Code wokring perfekt auf Xcode 8.3.1. Sie können nach Bedarf anpassen.
quelle
Ich benutze nur diese Art von Nachfrage, scheinbar und systematisch, Details sind etwas anders, also sind wir ... OC hat die Kapselung von Warn- und Blatt-Popup-Fenstern erkannt.
In der täglichen Entwicklung häufig anzutreffen ist es, eine Zahl zu Alert hinzuzufügen oder eine Schaltflächenfarbe zu ändern, wie z. B. "einfache" Anforderungen. Heutzutage sind Systemkomponenten sehr ähnlich und können die Anforderungen an kundenspezifische Verpackungskomponenten vollständig erfüllen.
Github: https://github.com/ReverseScale/RSCustomAlertView
quelle