首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UITraitCollection -迅速到达目标-C

UITraitCollection -迅速到达目标-C
EN

Stack Overflow用户
提问于 2015-07-10 01:56:58
回答 1查看 908关注 0票数 1

我正试图把斯威夫特转变成目标-C。下面是我的代码:

Swift

代码语言:javascript
复制
import UIKit

protocol TraitCollectionOverridable {
    func preferredTraitCollection() -> UITraitCollection?
}

class CustomNavigationController: UINavigationController {
    override func overrideTraitCollectionForChildViewController(childViewController: UIViewController) -> UITraitCollection? {
        guard let conformingViewController = childViewController as? TraitCollectionOverridable else {
            return super.overrideTraitCollectionForChildViewController(childViewController)
        }

        return conformingViewController.preferredTraitCollection()
    }
}

目标-C头文件

代码语言:javascript
复制
@protocol TraitCollectionOverridable <NSObject>
- (UITraitCollection *) preferredTraitCollection;
@end

@interface CustomNavigationController : UINavigationController
@property (nonatomic, weak) id <TraitCollectionOverridable> traitsDelegate;
@end

.m文件

代码语言:javascript
复制
@implementation CustomNavigationController

- (void)viewDidLoad {
    [super viewDidLoad];
    [self.traitsDelegate preferredTraitCollection];
    // Do any additional setup after loading the view.
}


- (UITraitCollection *)overrideTraitCollectionForChildViewController:(UIViewController *)childViewController
{
    if (CGRectGetWidth(self.view.bounds) < CGRectGetHeight(self.view.bounds)) {
        return [UITraitCollection traitCollectionWithHorizontalSizeClass:UIUserInterfaceSizeClassCompact];
    } else {
        return [UITraitCollection traitCollectionWithHorizontalSizeClass:UIUserInterfaceSizeClassRegular];
    }
}

@end

我猜overrideTraitCollectionForChildViewController不是正确转换的。在这方面任何帮助都会很好。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-10 03:51:06

我猜overrideTraitCollectionForChildViewController不是正确转换的。

Obj-C & Swift版本的overrideTraitCollectionForChildViewController并不等价。以下是修正后的代码:

Obj

代码语言:javascript
复制
- (UITraitCollection *)overrideTraitCollectionForChildViewController:(UIViewController *)childViewController
{
    if( [childViewController conformsToProtocol:@protocol(TraitCollectionOverridable)] ) {
        return [(NSObject<TraitCollectionOverridable>*)childViewController preferredTraitCollection];
    } else {
        return [super overrideTraitCollectionForChildViewController:childViewController];
    }
}

斯威夫特

代码语言:javascript
复制
override func overrideTraitCollectionForChildViewController(childViewController: UIViewController) -> UITraitCollection? {
    guard let conformingViewController = childViewController as? TraitCollectionOverridable else {
        return super.overrideTraitCollectionForChildViewController(childViewController)
    }

    return conformingViewController.preferredTraitCollection()
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31331257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档