ios - UITraitCollection - 快速到 objective-C

标签 ios objective-c swift uitraitcollection

我正在尝试将 swift 转换为 objective-C。下面是我的代码:

swift

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

最佳答案

My guess is overrideTraitCollectionForChildViewController is not converted properly.

Obj-CSwift 版本的 overrideTraitCollectionForChildViewController 并不等效。这是更正后的代码:

objective-C

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

swift

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

    return conformingViewController.preferredTraitCollection()
}

关于ios - UITraitCollection - 快速到 objective-C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31331257/

相关文章:

objective-c - 获取 EKRecurrenceRule 中 startDate 和 endDate 之间的出现次数

ios - 检测节点的父节点何时更改

ios - 有时使用 UNUserNotificationCenter 来自远程通知的空内容图像

ios - 根据节标题过滤 UITableView 的整个节

ios - 为静态 UITableView 单元格设置数据

ios - 'NSMutableArray' 没有可见的@interface 声明选择器 'addUtilityButtonWithColor:icon:'

ios - 我如何在 iphone 的 objective c 中为短信和铃声设置振动?

ios - UIStepper 上的辅助功能

ios - Swift 与 tableView 和部分 fatal error : unexpected nil when unwrapping

ios - 语法解释 : square brackets in Swift