繁体   English   中英

UITraitCollection-迅速转到Objective-C

[英]UITraitCollection - swift to objective-C

我正在尝试将swift转换为Objective-C。 这是我的代码如下:

迅速

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()
    }
}

Objective-C头文件

@protocol TraitCollectionOverridable <NSObject>
- (UITraitCollection *) preferredTraitCollection;
@end

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

.m文件

@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没有正确转换。 任何帮助都会很棒。

我的猜测是overrideTraitCollectionForChildViewController没有正确转换。

overrideTraitCollectionForChildViewControllerObj-CSwift版本不等效。 这是更正的代码:

OBJ-C

- (UITraitCollection *)overrideTraitCollectionForChildViewController:(UIViewController *)childViewController
{
    if( [childViewController conformsToProtocol:@protocol(TraitCollectionOverridable)] ) {
        return [(NSObject<TraitCollectionOverridable>*)childViewController preferredTraitCollection];
    } else {
        return [super overrideTraitCollectionForChildViewController:childViewController];
    }
}

迅速

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

    return conformingViewController.preferredTraitCollection()
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM