it-swarm.com.de

Ändern Sie die Textfarbe in den UIActionSheet-Schaltflächen

In meinem Projekt verwende ich UIActionSheet zum Anzeigen für einen Sortiertyp. Ich möchte die Farbe des in den Aktionsblattschaltflächen angezeigten Texts ändern. Wie können wir die Textfarbe ändern?

33
kiri

iOS 8:UIActionSheet ist veraltet. UIAlertController respektiert -[UIView tintColor], so funktioniert das:

alertController.view.tintColor = [UIColor redColor];

Besser noch, stellen Sie die Tönungsfarbe des gesamten Fensters in Ihrem Anwendungsdelegierten ein:

self.window.tintColor = [UIColor redColor];

iOS 7: Implementiere in deinem Action Sheet Delegate -willPresentActionSheet: wie folgt:

- (void)willPresentActionSheet:(UIActionSheet *)actionSheet
{
    for (UIView *subview in actionSheet.subviews) {
        if ([subview isKindOfClass:[UIButton class]]) {
            UIButton *button = (UIButton *)subview;
            [button setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
        }
    }
}
73
jrc

In iOS 8 funktioniert nichts mehr. UIActionSheet-Text scheint seine Farbe von window.tintColor zu erhalten.

19
lifjoy

Dies funktioniert für mich in iOS8

[[UIView appearanceWhenContainedIn:[UIAlertController class], nil] setTintColor:[UIColor redColor]];
17
blacksheep_2011

Wenn Sie jemals die Unteransichten von UIActionSheet durchgehen möchten, sollten Sie die Textfarbe von UILabel nicht direkt festlegen, sondern stattdessen die Methode UIButtonsetTitleColor:forState Verwenden. Andernfalls wird die ursprüngliche Farbe bei Ereignissen wie beispielsweise UIControlEventTouchDragOutside zurückgesetzt.

Hier ist die richtige Methode, um den Code des jrc wiederzuverwenden:

- (void)willPresentActionSheet:(UIActionSheet *)actionSheet
{
    for (UIView *subview in actionSheet.subviews) {
        if ([subview isKindOfClass:[UIButton class]]) {
            UIButton *button = (UIButton *)subview;
            [button setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
        }
    }
}
12
Jonathan

Vielleicht eine späte Antwort, aber ich denke, es könnte jemandem helfen.

iOS 8: Sie können Ihre UIAlertAction einfach mit dem folgenden Stil initialisieren: UIAlertActionStyleDestructive wie so:

UIAlertAction *delete = [UIAlertAction actionWithTitle:@"Delete" style:UIAlertActionStyleDestructive handler:^(UIAlertAction *action){

   // your code in here   

}];

Dadurch wird der Text der Schaltfläche standardmäßig rot.

enter image description here

5
Julius

Lösung für Swift. Ändert alle Farben.

UIView.appearance(whenContainedInInstancesOf: [UIAlertController.self]).tintColor = .yellow
2
kubacizek

Die @ jrc-Lösung funktioniert, aber die Farbe von titleLabel ändert sich, wenn Sie auf die Schaltfläche tippen. Versuchen Sie dies, um in allen Zuständen die gleiche Farbe beizubehalten.

- (void)willPresentActionSheet:(UIActionSheet *)actionSheet
{     
 UIColor *customTitleColor = [UIColor greenColor];
      for (UIView *subview in actionSheet.subviews) {
        if ([subview isKindOfClass:[UIButton class]]) {
          UIButton *button = (UIButton *)subview;

          [button setTitleColor:customTitleColor forState:UIControlStateHighlighted];
          [button setTitleColor:customTitleColor forState:UIControlStateNormal];
          [button setTitleColor:customTitleColor forState:UIControlStateSelected];
        }
      }
}
2
seufagner

verwenden Sie dies für iOS 8 und höher

SEL selector = NSSelectorFromString(@"_alertController");
if ([actionSheet respondsToSelector:selector])
{
    UIAlertController *alertController = [actionSheet valueForKey:@"_alertController"];
    if ([alertController isKindOfClass:[UIAlertController class]])
    {
        alertController.view.tintColor = [UIColor blueColor];
    }
}
else
{
    // use other methods for iOS 7 or older.
}
1
Ravish

[~ # ~] edit [~ # ~]

Hier ist eine ähnliche Frage: So passen Sie Schaltflächen in UIActionSheet an?

Versuchen Sie, das appearance-Protokoll zu verwenden. [ NOT WORKING ]

 UIButton *btn = [UIButton appearanceWhenContainedIn:[UIActionSheet class], nil];
 [btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
1
alexcristea

UIAppearance kann damit umgehen:

[[UIButton appearanceWhenContainedIn:[UIActionSheet class], nil] setTitleColor:[UIColor cyanColor] forState:UIControlStateNormal];

Viel einfacher als die Unteransichten durchzugehen, aber ich habe diese Lösung nicht unter iOS 6 oder früher getestet.

0
cantoni