Actualización para iOS 9:
Si está apuntando a iOS 9+ (a partir de Xcode 7 b1), hay un nuevo método en el UIAppearance
protocolo que no usa varargs:
static func appearanceWhenContainedInInstancesOfClasses(containerTypes: [AnyObject.Type]) -> Self
Que se puede usar así:
UITextField.appearanceWhenContainedInInstancesOfClasses([MyViewController.self]).keyboardAppearance = .Light
Si aún necesita admitir iOS 8 o anterior, use la siguiente respuesta original a esta pregunta.
Para iOS 8 y 7:
Estos métodos no están disponibles para Swift porque los métodos de varargs Obj-C no son compatibles con Swift (consulte http://www.openradar.me/17302764 ).
Escribí una solución no variada que funciona en Swift (repetí el mismo método para UIBarItem
, que no desciende 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
Solo asegúrese de hacerlo #import "UIAppearance+Swift.h"
en su encabezado de puente.
Luego, para llamar desde Swift (por ejemplo):
# Swift 2.x:
UITextField.my_appearanceWhenContainedIn(MyViewController.self).keyboardAppearance = .Light
# Swift 3.x:
UITextField.my_appearanceWhenContained(in: MyViewController.self).keyboardAppearance = .light