อัปเดตสำหรับ 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 เนื่องจากวิธี Obj-C varargs ไม่สามารถทำงานร่วมกับ 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