swift 3 - 未显示子类视图控制器
swift 3 - subclassed view controller not being displayed
在我的 Swift 3/Obj-C 应用程序中,我在显示 swift 视图控制器时遇到问题,该视图控制器是从 class 和 Obj-C class.
以下代码完美运行:
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
但是,如果我子class ParentViewController 并尝试呈现子class、"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 相同的内容吗?
问题是 ParentViewController 与 .xib 文件相关联(单击 .xib 文件 -> 转到识别检查器 -> 在自定义 Class 下,您会发现 "ParentViewController")。因此,当 subclassing ParentViewController 创建 SubClassedViewController class 时,我还需要使用以下代码来初始化相同的 .xib 文件:
(Swift 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/Obj-C 应用程序中,我在显示 swift 视图控制器时遇到问题,该视图控制器是从 class 和 Obj-C class.
以下代码完美运行:
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
但是,如果我子class ParentViewController 并尝试呈现子class、"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 相同的内容吗?
问题是 ParentViewController 与 .xib 文件相关联(单击 .xib 文件 -> 转到识别检查器 -> 在自定义 Class 下,您会发现 "ParentViewController")。因此,当 subclassing ParentViewController 创建 SubClassedViewController class 时,我还需要使用以下代码来初始化相同的 .xib 文件:
(Swift 3)
class SubClassedViewController: ParentViewController
{
override init(someParameter: someClass) {
super.init(nibName: "ParentViewController", bundle: nil)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
}