İOS 9 güncellemesi:
UIAppearance
İOS 9+ hedefliyorsanız (Xcode 7 b1'den itibaren ), protokolde vararg kullanmayan yeni bir yöntem vardır :
static func appearanceWhenContainedInInstancesOfClasses(containerTypes: [AnyObject.Type]) -> Self
Hangisi böyle kullanılabilir:
UITextField.appearanceWhenContainedInInstancesOfClasses([MyViewController.self]).keyboardAppearance = .Light
Hala iOS 8 veya önceki bir sürümünü desteklemeniz gerekiyorsa, bu soruya aşağıdaki orijinal cevabı kullanın.
İOS 8 ve 7 için:
Bu yöntemler Swift için mevcut değildir çünkü Obj-C varargs yöntemleri Swift ile uyumlu değildir (bkz. Http://www.openradar.me/17302764 ).
Swift'de çalışan, değişken olmayan bir çözüm yazdım (aynı yöntemi tekrarladım UIBarItem
, bunun için inmiyor 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
Sadece #import "UIAppearance+Swift.h"
köprü başlığınızda emin olun .
Ardından Swift'den aramak için (örneğin):
# Swift 2.x:
UITextField.my_appearanceWhenContainedIn(MyViewController.self).keyboardAppearance = .Light
# Swift 3.x:
UITextField.my_appearanceWhenContained(in: MyViewController.self).keyboardAppearance = .light