Cập nhật cho iOS 9:
Nếu bạn đang nhắm mục tiêu iOS 9+ (kể từ Xcode 7 b1), có một phương thức mới trong UIAppearance
giao thức không sử dụng varargs:
static func appearanceWhenContainedInInstancesOfClasses(containerTypes: [AnyObject.Type]) -> Self
Mà có thể được sử dụng như vậy:
UITextField.appearanceWhenContainedInInstancesOfClasses([MyViewController.self]).keyboardAppearance = .Light
Nếu bạn vẫn cần hỗ trợ iOS 8 hoặc sớm hơn, hãy sử dụng câu trả lời ban đầu sau cho câu hỏi này.
Dành cho iOS 8 & 7:
Các phương thức này không có sẵn cho Swift vì các phương thức varargs Obj-C không tương thích với Swift (xem http://www.openradar.me/17302764 ).
Tôi đã viết một cách giải quyết khác không hoạt động trong Swift (Tôi đã lặp lại cùng một phương thức UIBarItem
, không xuất phát từ đó 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
Chỉ cần chắc chắn #import "UIAppearance+Swift.h"
trong tiêu đề bắc cầu của bạn.
Sau đó, để gọi từ Swift (ví dụ):
# Swift 2.x:
UITextField.my_appearanceWhenContainedIn(MyViewController.self).keyboardAppearance = .Light
# Swift 3.x:
UITextField.my_appearanceWhenContained(in: MyViewController.self).keyboardAppearance = .light