Обновление для iOS 9:
Если вы ориентируетесь на iOS 9+ (начиная с Xcode 7 b1), в UIAppearance
протоколе есть новый метод , который не использует varargs:
static func appearanceWhenContainedInInstancesOfClasses(containerTypes: [AnyObject.Type]) -> Self
Что можно использовать так:
UITextField.appearanceWhenContainedInInstancesOfClasses([MyViewController.self]).keyboardAppearance = .Light
Если вам по-прежнему требуется поддержка iOS 8 или более ранней версии, используйте следующий исходный ответ на этот вопрос.
Для iOS 8 и 7:
Эти методы недоступны для Swift, поскольку методы varargs Obj-C несовместимы со Swift (см. Http://www.openradar.me/17302764 ).
Я написал обходной путь без вариации, который работает в Swift (я повторил тот же метод UIBarItem
, который не происходит от 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
Обязательно #import "UIAppearance+Swift.h"
укажите это в заголовке моста.
Затем, чтобы позвонить из Swift (например):
# Swift 2.x:
UITextField.my_appearanceWhenContainedIn(MyViewController.self).keyboardAppearance = .Light
# Swift 3.x:
UITextField.my_appearanceWhenContained(in: MyViewController.self).keyboardAppearance = .light