【问题标题】:ViewDidLoad not called on custom objects in Storyboard未在 Storyboard 中的自定义对象上调用 ViewDidLoad
【发布时间】:2014-09-28 15:06:00
【问题描述】:

我终于切换到 Storyboards,但在加载自定义控制器时遇到问题,这在使用界面生成器时很容易做到。

我的 ViewControllerOne 有两个组件:一个 UIView 和 UITableView 作为子视图。

我希望 UITableView 由自定义 tableview 控制器控制。如果这是 Interface builder,我会在 XIB 上放置一个 tableview 控制器,链接到自定义控制器并建立连接,然后就可以完成了。

使用情节提要,我认为不可能将 UIViewController/UITableViewController 放到已经有视图控制器的场景中,我依靠 Objects 来实现这一点。

所以我在场景中添加了一个对象并将其链接到我的自定义 tableview 控制器。我为我的 UITableView 设置委托/日期源以指向自定义控制器。我终于将 UITableViews 插座连接到自定义控制器。

当我编译它时,自定义控制器委托(用于表格视图)被调用,但 viewDidLoad 从未被调用。

我可以调用 viewDidLoad 的唯一方法是如果我将 UITableView 移出 ViewControllerOne。我的理解是,即使一个场景有一个视图控制器,我仍然可以使用自定义控制器来操作子视图。

是我误解了什么还是有解决办法?

一些截图

【问题讨论】:

    标签: ios storyboard interface-builder uistoryboard


    【解决方案1】:

    如果我正确理解了您的问题:

    1 打开故事板并导航到您希望成为自定义类型的表格视图控制器。

    2 点击右侧面板中的身份检查器。

    3 将类设置为应有的样子。

    【讨论】:

    • 我已经这样做了。正在调用该类,但从未调用 viewDidLoad。
    • 并且在属性检查器中选择了“初始场景”?
    【解决方案2】:

    这里面有一点魔力。从 awakeFromNib 调用 self.view,流量将返回到轨道

    - (void)awakeFromNib
    {
        [super awakeFromNib];
        // here comes the magic - call self.view and view will load as expected
        NSLog(@"awakeFromNib %@", self.view)
    }
    

    您可以从 initWithNibName:bundle: 中调用它:

    - (id)initWithNibName:(NSString*)nibNameOrNil bundle:(NSBundle*)nibBundleOrNil
    {
        self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
        if (self) {
            // Custom initialization
            NSLog(@"awakeFromNib %@", self.view);
        }
        return self;
    }
    

    关键是调用 self.view,因为显然里面做了一些事情。

    【讨论】:

      猜你喜欢
      • 2014-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多