it-swarm.com.de

Die Farbe der UIAlertController-Farbe ist bei Hervorhebung standardmäßig blau

Ich verwende den folgenden Code, um ein UIAlertController-Aktionsblatt mit dem Elementtext als rot darzustellen. Ich habe die Tönungseigenschaft verwendet, um die Farbe festzulegen.

UIAlertController *alertController = [UIAlertController
                                      alertControllerWithTitle:nil
                                      message:nil
                                      preferredStyle:UIAlertControllerStyleActionSheet];
alertController.view.tintColor = [UIColor redColor];

Die Textfarbe scheint bei Hervorhebung oder Auswahl standardmäßig blau zu sein. Ist das normal und wie höre ich damit auf?

31
Bcf Ant

Dies ist ein bekannter Fehler, siehe https://openradar.appspot.com/22209332

Um dies zu beheben, wenden Sie die Tönungsfarbe erneut im Completion-Handler an. Hier ist meine schnelle Lösung, die Sie leicht für ObjC anpassen können:

alertController.view.tintColor = UIColor.redColor() // apply 1st time to prevent flicker from Blue to Red when displaying

navigationController?.presentViewController(alertController, animated: true, completion: {
    // Bugfix: iOS9 - Tint not fully Applied without Reapplying
    alertController.view.tintColor = UIColor.redColor()
})

Eine Anmerkung: Dies behebt den Fehler nicht vollständig. Bei der Gerätedrehung werden Sie feststellen, dass die Schaltflächen mit dem Farbton "System Default" (= Blau) neu eingefärbt werden.

Erwarten Sie, dass es mit iOS 9.1 behoben wird.

Edit 23.10.2015: Immer noch nicht behoben mit iOS 9.1. Erneut getestet mit iOS 9.1 + Xcode 7.1 (7B91B), das vor einigen Tagen veröffentlicht wurde. Ab jetzt funktioniert die Einstellung von .tintColor nicht. Sie können jedoch, wie kommentiert, die tintColor der gesamten Anwendung einstellen, z. in AppDelegate hat didFinishLaunchingWithOptions window?.tintColor = UIColor.redColor() gesetzt. Dies färbt auch die AlertController-Schaltflächen ein, kann jedoch in einigen Fällen nicht geeignet sein, da diese Tönung in der gesamten Anwendung angewendet wird.

Fügen Sie einfach tintColor nach dem presentViewController hinzu. Funktioniert auf iOS 9.0.2

[self presentViewController:alertController animated:YES completion:nil];

[alertController.view setTintColor:[UIColor yellowColor]];
38
Eddy

Sie können die Farbtonfarbe der App auch in appdelegate ändern.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window.tintcolor = [UIColor yellowColor];
    return YES;
}

funktioniert perfekt für mich.

13
marco v berlo

Update für Swift 4, Xcode 9

private static func setupAppearanceForAlertController() {
    let view = UIView.appearance(whenContainedInInstancesOf: [UIAlertController.self])
    view.tintColor = .black
}
6
Ben M

Sie können die Tastenfarbe auf diese Weise ändern

UIAlertAction* button = [UIAlertAction
                              actionWithTitle:@"Delete Profile"
                              style:UIAlertActionStyleDefault
                              handler:^(UIAlertAction * action)
                              {
                                  //Add Action.
                              }];
[button setValue:[UIColor redColor] forKey:@"titleTextColor"];

Über diese Zeile [Taste setValue: [UIColor redColor] forKey: @ "titleTextColor"]; Sie können die Schaltflächenfarbe Ihres Aktionsblatts ändern 

5

Ändern Sie einfach Ihre Ansicht tintAdjustmentMode in UIViewTintAdjustmentModeNormal, damit die Farbe bei dimm nicht geändert wird.

1
Alexander

Legen Sie Ihre Farbtonfarbe in traitCollectionDidChange in einer Unterklasse von UIAlertController fest.

override func traitCollectionDidChange(previousTraitCollection: UITraitCollection?) {
    super.traitCollectionDidChange(previousTraitCollection)
    self.view.tintColor = UIColor.redColor()
}
1
laynemoseley

So legen Sie benutzerdefinierte color und font subclass UIAlertController fest. 

import UIKit

class StyledAlertController: UIAlertController {

    private var cancelText:String?

    override func viewDidLoad() {
        super.viewDidLoad()
        view.tintColor = YourColor
    }

    override func viewWillLayoutSubviews() {
        super.viewWillLayoutSubviews()
        findLabel(view)
    }

    private func findLabel(scanView: UIView!) {
        if (scanView.subviews.count > 0) {
            for subview in scanView.subviews {
                if let label:UILabel = subview as? UILabel {
                    if (cancelText != nil && label.text == cancelText!) {
                        dispatch_async(dispatch_get_main_queue(),{
                            label.textColor = YourColor
                            label.tintColor = YourColor
                        })
                    }
                    let font:UIFont = UIFont(name: YourFont, size: label.font!.pointSize)!
                    label.font = font
                }
                findLabel(subview)
            }
        }
    }
}

Verwenden Sie so (wie Sie es normalerweise tun würden)

let StyledAlertController = StyledAlertController(title: "My Title", message: "My Message", preferredStyle: .ActionSheet)

let cancelAction:UIAlertAction = UIAlertAction(title: "Cancel", style: .Cancel) { action -> Void in
        print("Cancel Action Click")
    }
actionSheetController.addAction(cancelAction)

let anotherAction:UIAlertAction = UIAlertAction(title: "Another Action", style: .Default) { action -> Void in
        print("Another Action Click")
    }
actionSheetController.addAction(anotherAction:UIAlertAction)

presentViewController(actionSheetController, animated: true, completion: nil)
1
Michael

Ich bin immer noch verwirrt, was Sie erreichen wollen. Sie können jedoch versuchen, auf die Art und Weise von Apple Destructive-Schaltflächen zu erstellen (standardmäßig ist die Textfarbe Rot). 

Der Code, in dem Sie UIAlertActions erstellen, verwendet nicht den Default-Stil für die gewünschten Schaltflächen in roter Farbe. Verwenden Sie stattdessen UIAlertActionStyleDestructive. Beispielcode :

UIAlertAction* cancel = [UIAlertAction
                         actionWithTitle:@"Cancel"
                         style:UIAlertActionStyleDestructive
                         handler:^(UIAlertAction * action)
                         {
                             [view dismissViewControllerAnimated:YES completion:nil];

                         }];
0
Vinay Jain

Um das schnelle "Aufspringen" der neuen Tönungsfarbe zu verhindern, kann der Alpha-Wert des Alarmcontrollers animiert werden. Dann sieht es genauso aus, als ob da kein Fehler wäre:

    alertController.view.alpha = 0.0
    presentViewController(alertController, animated: false) {
        alertController.view.tintColor = UIColor.redColor()
        UIView.animateWithDuration(0.2, animations: { alertController.view.alpha = 1.0 }, completion: nil)
    }
0
Darko

UIAlertController ist ab iOS 8 verfügbar, daher gibt es einen Fehler für Geräte mit älterer Version. Es gibt kein Problem für Geräte mit entsprechender oder höherer Version.

0
G.Hakobyan