[Ios] AussehenWenn ContainedIn in Swift



Answers

ios 10 swift 3

UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).title = "Kapat"
Question

Ich versuche, meine App in die Swift-Sprache zu konvertieren.

Ich habe diese Codezeile:

[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil]
                     setTitleTextAttributes:textDictionary
                                   forState:UIControlStateNormal];

Wie konvertiert man es in Swift?

In Apples Dokumenten gibt es keine solche Methode.




Sie können dies verwenden:

UIBarButtonItem.appearance().setTitleTextAttributes(textDictionary, forState: UIControlState.Normal)

Edit: appearanceWhenContainedIn wurde in Swift entfernt. Diese Antwort war für die Beta 5, um das Erscheinungsbild des Textes aller Balkenschaltflächen zu ändern.




Hier ist ein weniger hässlicher, aber immer noch hässlicher Workaround, der von @tdun inspiriert wurde.

  1. Erstellen Sie eine Klasse, die Ihre Objective-C-Darstellung enthält. In diesem Beispiel nennen wir es AppearanceBridger .
  2. Fügen Sie diese Klasse zu Ihrem Bridging-Header hinzu. Wenn Sie keinen Überbrückungs-Header haben, erstellen Sie einen .
  3. Erstellen Sie eine Klassenmethode in AppearanceBridger Namen +(void)setAppearance und +(void)setAppearance in dieser Methode den Objective-C-Erscheinungsbildcode ein. Beispielsweise:


+ (void)setAppearance {
    [[UIView appearanceWhenContainedIn:[UITableViewHeaderFooterView class], nil] setBackgroundColor:[UIColor whiteColor]];
}

  1. Rufen Sie in Ihrem Swift-Code, in dem Sie die Darstellung festlegen, AppearanceBridger.setAppearance() und Sie sollten gut gehen!

Hoffe, das funktioniert gut für Leute, die es sehen.




Dies kann auf jede Klasse erweitert werden, die dem UIAppearance-Protokoll entspricht - nicht nur UIViews. Also hier ist eine generische Version:

UIAppearance + Swift.h

#import <UIKit/UIKit.h>

@interface NSObject (UIAppearance_Swift)

+ (instancetype)appearanceWhenContainedWithin:(Class<UIAppearanceContainer>)containerClass;

@end

UIAppearance + Swift.m

#import "UIAppearance+Swift.h"

@implementation NSObject (UIAppearance_Swift)

+ (instancetype)appearanceWhenContainedWithin:(Class<UIAppearanceContainer>)containerClass {
    if ([self conformsToProtocol:@protocol(UIAppearance)]) {
        return [(id<UIAppearance>)self appearanceWhenContainedIn:containerClass, nil];
    }
    return nil;
}

@end



Es scheint, dass Swift (zumindest ab Beta5) es aus mir unbekannten Gründen nicht unterstützen kann. Vielleicht ist das Sprachfeature noch in Arbeit, da ich nur annehmen kann, dass sie es aus gutem Grund aus der Oberfläche gelassen haben. Wie Sie gesagt haben, ist es laut den Dokumenten immer noch in ObjC verfügbar. Wirklich enttäuschend.




Links