【问题标题】:When will subviews being added to super view from storyboard?何时将子视图从情节提要添加到超级视图?
【发布时间】:2016-04-19 07:23:53
【问题描述】:

我从情节提要中创建了一个控制器,其中包含一个 tableView。

我编译运行后会显示tableView,但是当我在viewDidLoad方法中使用self.view.subviews获取它的子视图时,却找不到tableView。

另外,我尝试在viewDidLoad中执行[self.tableView removeFromSuperview]方法,但是tableView最后还是会显示出来。

viewDidLoad 执行时,tableView 似乎还没有添加超级视图。但是,在故事板创建的另一个控制器中,我可以在 viewDidLoad 中使用 self.view.subviews 获取 tableView ...

我想知道是什么导致了这种情况以及何时添加 tableView。

【问题讨论】:

  • 当我在 viewDidAppear 中使用 self.view.subviews 时,两个控制器都返回给我 tableView,但为什么不在 viewDidLoad 中?
  • 在检查 tableView 的状态之前,你是否在 viewDidLoad 中调用了 super?
  • 你好,你是在 IB vc 课上连接的吗?请检查您是否做对了。
  • @AliBeadle 你是什么意思??
  • @wkx 我想知道视图的 viewDidLoad 价格的某些部分是否需要出现才能完成添加 tableView。我不确定,所以这不一定是一个答案,但如果你还没有,请尝试在 viewDidLoad 重载开始时调用 super.viewDidLoad。

标签: ios objective-c xcode storyboard


【解决方案1】:

忽略我的评论,我不认为调用 super 是答案(尽管它仍然是普遍的好习惯)。

文档不清楚,但在 viewDidLoad 中您似乎唯一可以依赖的是视图本身已加载,而不是它的任何子视图,正如您所发现的那样,它可能会也可能不会。

如果您确实需要访问子视图,它们保证会出现在 viewDidLayoutSubviews 中,如this SO answer 中所述,但请注意,每当布局子视图时都会调用它,在典型情况下会多次调用应用生命周期(例如,当用户旋转他们的设备时它也会被调用)。

如果您确实需要在加载后立即访问子视图,您可以将其子类化并覆盖其自己的 viewDidLoad 方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-06
    • 1970-01-01
    • 2014-07-12
    • 1970-01-01
    • 2012-07-29
    • 1970-01-01
    相关资源
    最近更新 更多