alloc init 不会在其中加载组件

Posted

技术标签:

【中文标题】alloc init 不会在其中加载组件【英文标题】:alloc init does not load component in it 【发布时间】:2016-05-03 06:02:07 【问题描述】:

我正在使用UINavigationController,但是当我推送视图控制器时,只需简单地使类的对象加载类而不是其中的组件。 这是我的AppDelegate.m

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
ViewController *vc = [sb instantiateInitialViewController];
UINavigationController *nav = [[UINavigationController alloc] init];
self.window.rootViewController = nav;
nav.viewControllers = @[vc];

如果操作按钮代码是,我的第一个UIViewController

NextView *next = [[NextView alloc] init];
[self.navigationController pushViewController:next animated:YES ];

它到达下一个UIViewController,但没有加载内部组件,例如 - 按钮、文本字段等。

如果我尝试这段代码,它会给我运行时错误

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
NextView *next = [sb instantiateViewControllerWithIdentifier:@"two"];
[self.navigationController pushViewController:next animated:YES ];

【问题讨论】:

你在故事板中给出了标识符吗? 你得到什么样的运行时错误?请粘贴登录问题。 您遇到了哪个运行时错误? 【参考方案1】:

确保 NextView 继承 UIViewController 并且您已将标识符作为 two 分配给该视图控制器,并且您已将类 NextView 从身份检查器设置为该视图控制器。

希望这会有所帮助:)

【讨论】:

【参考方案2】:

您无法在 UIViewController 的子类中使用 alloc init 加载插座(按钮等)。您应该使用 -initWithNibName:bundle: 方法使用 xib 文件对其进行初始化。或者你可以用故事板实例化它。

// You can get current storyboard from the View Controller 
UIStoryboard *sb = vc.storyboard;
NextView *next = [sb instantiateViewControllerWithIdentifier:@"two"];
[self.navigationController pushViewController:next animated:YES];

【讨论】:

@sahib,请告诉我们这个方法有什么错误?

以上是关于alloc init 不会在其中加载组件的主要内容,如果未能解决你的问题,请参考以下文章

通过StoryBoard加载视图控制器问题

组件应答器的 CSS 未加载到特定组件内

嵌套反应路由器组件不会在页面重新加载时加载/渲染?

整理ViewController的生命周期和加载过程

UIKit框架控制器view的加载方式

Flutter PageView组件怎样让子组件不会重复加载