Оновлення для 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