swift 3 - 未显示子类视图控制器

Posted

技术标签:

【中文标题】swift 3 - 未显示子类视图控制器【英文标题】:swift 3 - subclassed view controller not being displayed 【发布时间】:2017-03-03 20:33:37 【问题描述】:

在我的 Swift 3/Obj-C 应用程序中,我无法显示一个 swift 视图控制器,它是 Obj-C 类的子类。

以下代码完美运行:

NavigationController.swift

func myMethod()
    ...
    let vc = ParentViewController.init(someParameter: parameter) // << results in desired screen
    vc?.stringProperty = "someString"
    self.pushViewController(vc!, animated: true)

SuperParentViewController.h

@interface SuperParentViewController : UIViewController 
     @property (nonatomic, strong) NSString *stringProperty;
     - (instancetype)initWithSomeParameter:(SomeClass *)someParameter;
@end

ParentViewController.h

@interface ParentViewController : SuperParentViewController
     // numerous properties are declared here
@end

ParentViewController.m

@implementation ParentViewController
    ...

    - (void)viewDidLoad
        [super viewDidLoad];
        // a bunch of properties are set
    

    - (void)viewWillAppear:(BOOL)animated
        [super viewWillAppear:animated];
        // more properties are set
    

    ...
@end

但是,如果我将 ParentViewController 子类化并尝试呈现子类“SubclassViewController”,则会导致屏幕仅显示导航栏项目;屏幕的其余部分是空白的:

NavigationController.swift

func myMethod()
    ...
    let vc = SubClassedViewController.init(someParameter: parameter) // << results in blank screen
    vc?.stringProperty = "someString"
    self.pushViewController(vc!, animated: true)

SubClassedViewController.swift

class SubClassedViewController: ParentViewController

    // nothing in this file yet

谁能告诉我为什么 SubClassedViewController 无法显示 ParentViewController 的相同内容?

【问题讨论】:

我会检查是否调用了超类中的所有视图循环方法。此外,查看 Xcode 中的 View Hierarchy 可能会有所帮助。 【参考方案1】:

问题在于 ParentViewController 与 .xib 文件相关联(单击 .xib 文件 -> 转到识别检查器 -> 在自定义类下,您将找到“ParentViewController”)。因此,在继承 ParentViewController 以创建 SubClassedViewController 类时,我还需要使用以下代码来初始化相同的 .xib 文件:

(斯威夫特 3)

class SubClassedViewController: ParentViewController
    
    override init(someParameter: someClass) 
        super.init(nibName: "ParentViewController", bundle: nil)
    

    required init?(coder aDecoder: NSCoder) 
        super.init(coder: aDecoder)
    

【讨论】:

以上是关于swift 3 - 未显示子类视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

swift项目第七天:构建访客界面以及监听按钮点击

Swift 3 中的 UIPickerView 和子类数组

Swift 故事板:拆分视图控制器在 MacOS 上未正确显示

Swift - 表视图未填充数据但未显示错误

视图控制器未正确显示

iphone UIViewController 基子类未在 UINavigationController 中显示视图