Aggiornamento per iOS 9:
Se scegli come target iOS 9+ (a partire da Xcode 7 b1), nel UIAppearance
protocollo è presente un nuovo metodo che non utilizza varargs:
static func appearanceWhenContainedInInstancesOfClasses(containerTypes: [AnyObject.Type]) -> Self
Quale può essere usato così:
UITextField.appearanceWhenContainedInInstancesOfClasses([MyViewController.self]).keyboardAppearance = .Light
Se hai ancora bisogno di supportare iOS 8 o precedenti, usa la seguente risposta originale a questa domanda.
Per iOS 8 e 7:
Questi metodi non sono disponibili per Swift perché i metodi varargs di Obj-C non sono compatibili con Swift (vedere http://www.openradar.me/17302764 ).
Ho scritto una soluzione alternativa non variadica che funziona in Swift (ho ripetuto lo stesso metodo per UIBarItem
, da cui non discende 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
Assicurati di #import "UIAppearance+Swift.h"
averlo nell'intestazione del ponte.
Quindi, per chiamare da Swift (ad esempio):
# Swift 2.x:
UITextField.my_appearanceWhenContainedIn(MyViewController.self).keyboardAppearance = .Light
# Swift 3.x:
UITextField.my_appearanceWhenContained(in: MyViewController.self).keyboardAppearance = .light