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