Atualização para iOS 9:
Se você está segmentando o iOS 9 ou superior (a partir do Xcode 7 b1), há um novo método no UIAppearance
protocolo que não usa varargs:
static func appearanceWhenContainedInInstancesOfClasses(containerTypes: [AnyObject.Type]) -> Self
Que pode ser usado assim:
UITextField.appearanceWhenContainedInInstancesOfClasses([MyViewController.self]).keyboardAppearance = .Light
Se você ainda precisar oferecer suporte ao iOS 8 ou anterior, use a seguinte resposta original para esta pergunta.
Para iOS 8 e 7:
Esses métodos não estão disponíveis para o Swift porque os métodos de varargs do Obj-C não são compatíveis com o Swift (consulte http://www.openradar.me/17302764 ).
Eu escrevi uma solução alternativa não-variável que funciona em Swift (repeti o mesmo método para UIBarItem
, que não desce 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
Apenas certifique-se de #import "UIAppearance+Swift.h"
no cabeçalho da ponte.
Em seguida, para ligar de Swift (por exemplo):
# Swift 2.x:
UITextField.my_appearanceWhenContainedIn(MyViewController.self).keyboardAppearance = .Light
# Swift 3.x:
UITextField.my_appearanceWhenContained(in: MyViewController.self).keyboardAppearance = .light