IOS 9 के लिए अपडेट करें:
यदि आप iOS 9+ (Xcode 7 b1 के रूप में) को लक्षित कर रहे हैं, तो UIAppearance
प्रोटोकॉल में एक नया तरीका है, जो वैरिएग का उपयोग नहीं करता है:
static func appearanceWhenContainedInInstancesOfClasses(containerTypes: [AnyObject.Type]) -> Self
जिसका उपयोग इस तरह किया जा सकता है:
UITextField.appearanceWhenContainedInInstancesOfClasses([MyViewController.self]).keyboardAppearance = .Light
यदि आपको अभी भी iOS 8 या उससे पहले के समर्थन की आवश्यकता है, तो इस प्रश्न के निम्नलिखित मूल उत्तर का उपयोग करें।
IOS 8 और 7 के लिए:
ये विधियां स्विफ्ट के लिए उपलब्ध नहीं हैं क्योंकि ओबज-सी वैरग तरीके स्विफ्ट के साथ संगत नहीं हैं (देखें http://www.openradar.me/17302764 )।
मैंने एक नॉन-वैरडिक वर्कअराउंड लिखा, जो स्विफ्ट में काम करता है (मैंने उसी तरीके को दोहराया UIBarItem
, जो इससे नहीं उतरता 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
बस #import "UIAppearance+Swift.h"
अपने ब्रिजिंग हेडर में सुनिश्चित रहें।
फिर, स्विफ्ट से कॉल करने के लिए (उदाहरण के लिए):
# Swift 2.x:
UITextField.my_appearanceWhenContainedIn(MyViewController.self).keyboardAppearance = .Light
# Swift 3.x:
UITextField.my_appearanceWhenContained(in: MyViewController.self).keyboardAppearance = .light