Aktualizacja dla iOS 9:
Jeśli celujesz w system iOS 9+ (od Xcode 7 b1), w UIAppearance
protokole jest nowa metoda , która nie korzysta z funkcji varargs:
static func appearanceWhenContainedInInstancesOfClasses(containerTypes: [AnyObject.Type]) -> Self
Które można wykorzystać w ten sposób:
UITextField.appearanceWhenContainedInInstancesOfClasses([MyViewController.self]).keyboardAppearance = .Light
Jeśli nadal potrzebujesz obsługi systemu iOS 8 lub starszego, użyj następującej oryginalnej odpowiedzi na to pytanie.
W przypadku iOS 8 i 7:
Te metody nie są dostępne dla Swift, ponieważ metody Obj-C varargs nie są kompatybilne z Swift (patrz http://www.openradar.me/17302764 ).
Napisałem niezróżnicowane obejście, które działa w Swift (powtórzyłem tę samą metodę dla UIBarItem
, która nie pochodzi od 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
Po prostu upewnij się, że #import "UIAppearance+Swift.h"
w nagłówku mostkowania.
Następnie, aby zadzwonić z Swift (na przykład):
# Swift 2.x:
UITextField.my_appearanceWhenContainedIn(MyViewController.self).keyboardAppearance = .Light
# Swift 3.x:
UITextField.my_appearanceWhenContained(in: MyViewController.self).keyboardAppearance = .light