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의 경우 :
Obj-C varargs 메소드는 Swift와 호환되지 않으므로이 메소드는 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