Mise à jour pour iOS 9:
Si vous ciblez iOS 9+ (à partir de Xcode 7 b1), il existe une nouvelle méthode dans le UIAppearance
protocole qui n'utilise pas de varargs:
static func appearanceWhenContainedInInstancesOfClasses(containerTypes: [AnyObject.Type]) -> Self
Qui peut être utilisé comme ceci:
UITextField.appearanceWhenContainedInInstancesOfClasses([MyViewController.self]).keyboardAppearance = .Light
Si vous devez toujours prendre en charge iOS 8 ou une version antérieure, utilisez la réponse originale suivante à cette question.
Pour iOS 8 et 7:
Ces méthodes ne sont pas disponibles pour Swift car les méthodes varargs Obj-C ne sont pas compatibles avec Swift (voir http://www.openradar.me/17302764 ).
J'ai écrit une solution de contournement non variadique qui fonctionne dans Swift (j'ai répété la même méthode pour UIBarItem
, qui ne descend pas de 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
Assurez-vous simplement de le faire #import "UIAppearance+Swift.h"
dans votre en-tête de pontage.
Ensuite, pour appeler depuis Swift (par exemple):
# Swift 2.x:
UITextField.my_appearanceWhenContainedIn(MyViewController.self).keyboardAppearance = .Light
# Swift 3.x:
UITextField.my_appearanceWhenContained(in: MyViewController.self).keyboardAppearance = .light