Update für iOS 9:
Wenn Sie auf iOS 9+ (ab Xcode 7 b1) abzielen, gibt es eine neue Methode im UIAppearance
Protokoll, die keine varargs verwendet:
static func appearanceWhenContainedInInstancesOfClasses(containerTypes: [AnyObject.Type]) -> Self
Welches kann so verwendet werden:
UITextField.appearanceWhenContainedInInstancesOfClasses([MyViewController.self]).keyboardAppearance = .Light
Wenn Sie iOS 8 oder früher noch unterstützen müssen, verwenden Sie die folgende Originalantwort auf diese Frage.
Für iOS 8 & 7:
Diese Methoden stehen Swift nicht zur Verfügung, da Obj-C-Varargs-Methoden nicht mit Swift kompatibel sind (siehe http://www.openradar.me/17302764 ).
Ich habe eine nicht-variadische Problemumgehung geschrieben, die in Swift funktioniert (ich habe dieselbe Methode für wiederholt UIBarItem
, von der nicht abstammt UIView
):
// UIAppearance+Swift.h
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface UIView (UIViewAppearance_Swift)
// appearanceWhenContainedIn: is not available in Swift. This fixes that.
+ (instancetype)my_appearanceWhenContainedIn:(Class<UIAppearanceContainer>)containerClass;
@end
NS_ASSUME_NONNULL_END
- -
// UIAppearance+Swift.m
#import "UIAppearance+Swift.h"
@implementation UIView (UIViewAppearance_Swift)
+ (instancetype)my_appearanceWhenContainedIn:(Class<UIAppearanceContainer>)containerClass {
return [self appearanceWhenContainedIn:containerClass, nil];
}
@end
Stellen Sie einfach sicher, dass Sie #import "UIAppearance+Swift.h"
in Ihrem Bridging-Header.
Um dann von Swift aus anzurufen (zum Beispiel):
# Swift 2.x:
UITextField.my_appearanceWhenContainedIn(MyViewController.self).keyboardAppearance = .Light
# Swift 3.x:
UITextField.my_appearanceWhenContained(in: MyViewController.self).keyboardAppearance = .light