Pembaruan untuk iOS 9:
Jika Anda menargetkan iOS 9+ (pada Xcode 7 b1), ada metode baru dalam UIAppearance
protokol yang tidak menggunakan varargs:
static func appearanceWhenContainedInInstancesOfClasses(containerTypes: [AnyObject.Type]) -> Self
Yang bisa digunakan seperti ini:
UITextField.appearanceWhenContainedInInstancesOfClasses([MyViewController.self]).keyboardAppearance = .Light
Jika Anda masih perlu mendukung iOS 8 atau yang lebih lama, gunakan jawaban asli berikut untuk pertanyaan ini.
Untuk iOS 8 & 7:
Metode ini tidak tersedia untuk Swift karena metode Obj-C varargs tidak kompatibel dengan Swift (lihat http://www.openradar.me/17302764 ).
Saya menulis solusi non-variadik yang bekerja di Swift (saya mengulangi metode yang sama untuk UIBarItem
, yang tidak turun dari 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
Pastikan untuk berada #import "UIAppearance+Swift.h"
di header bridging Anda.
Kemudian, untuk menelepon dari Swift (misalnya):
# Swift 2.x:
UITextField.my_appearanceWhenContainedIn(MyViewController.self).keyboardAppearance = .Light
# Swift 3.x:
UITextField.my_appearanceWhenContained(in: MyViewController.self).keyboardAppearance = .light