gpt4 book ai didi

ios - Swift 中的 appearanceWhenContainedIn

转载 作者:IT王子 更新时间:2023-10-29 04:55:47 26 4
gpt4 key购买 nike

我正在尝试将我的应用程序转换为 Swift 语言。

我有这行代码:

[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil]
setTitleTextAttributes:textDictionary
forState:UIControlStateNormal];

如何将其转换为 Swift?

Apple's docs ,没有这样的方法。

最佳答案

iOS 9 更新:

如果您的目标是 iOS 9+(从 Xcode 7 b1 开始),UIAppearance 协议(protocol)中有一个不使用可变参数的新方法:

static func appearanceWhenContainedInInstancesOfClasses(containerTypes: [AnyObject.Type]) -> Self

可以这样使用:

UITextField.appearanceWhenContainedInInstancesOfClasses([MyViewController.self]).keyboardAppearance = .Light

如果您仍然需要支持 iOS 8 或更早版本,请使用此问题的以下原始答案。

对于 iOS 8 和 7:

这些方法不适用于 Swift,因为 Obj-C 可变参数方法与 Swift 不兼容(参见 http://www.openradar.me/17302764)。

我写了一个在 Swift 中工作的非可变变通方法(我对 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

只需确保在您的桥接 header 中#import "UIAppearance+Swift.h"

然后,从 Swift 调用(例如):

# Swift 2.x:
UITextField.my_appearanceWhenContainedIn(MyViewController.self).keyboardAppearance = .Light

# Swift 3.x:
UITextField.my_appearanceWhenContained(in: MyViewController.self).keyboardAppearance = .light

关于ios - Swift 中的 appearanceWhenContainedIn,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24136874/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com