【问题标题】:iOS superview of UIView added in Storyboard is nil在 Storyboard 中添加的 UIView 的 iOS superview 为零
【发布时间】:2015-05-28 14:36:52
【问题描述】:

我的 UIView 遇到了一些意外行为,因此我决定打印一些有关视图及其超级视图的信息。当我尝试这样做时,我的 UIViews 的超级视图返回 nil。

我尝试打印出超级视图的 UIView 被添加到 Storyboard 中的视图控制器(通过从对象库中拖放),然后使用 IBOutlet 与视图控制器代码文件连接。此外,已在 Identity Inspector 中设置了正确的视图控制器代码文件类。具体来说,我拥有的视图是 UIPickerView、UILabel 和 UITextField。当我尝试访问这些 UIViews 的超级视图时,我得到了 nil。我的印象是,当通过 Storyboard 添加 UIView 时,它们会成为视图控制器的视图层次结构的一部分。所以我的问题是:

1) 我的假设是错误的吗?也就是说,它是否应该为零?如果是这样,如果使用 Storyboard 或一些参考文档添加 UIView 时,最好了解如何设置视图层次结构

2) 如果它不是 nil,那么有什么可能使 superview 为 nil?

【问题讨论】:

    标签: ios uiview


    【解决方案1】:

    如果将视图添加到与您正在运行的尺寸不同的尺寸类中,则会发生这种情况。通过将情节提要中的大小更改为 W:Any H:Any,您可以对所有设备类型进行全面了解。

    【讨论】:

      【解决方案2】:

      如果superviewnil,则视图不在视图层次结构中。您可能在添加视图之前进行检查。尝试签入awakeFromNib 方法。至此,层次结构已经建立。

      【讨论】:

      • 太棒了!谢谢,现在说得通了。我试图在 viewDidLoad() 方法中获取超级视图,我猜此时视图尚未设置(尽管我会从方法名称暗示它们是哈哈)我尝试使用按钮再次获取超级视图IBAction,它在那个时候起作用了=)
      • 调用 awakeFromNib 对我不起作用。我需要在视图完成加载之前以编程方式将视图添加到超级视图。只是为了澄清我覆盖了 awakeFromNib,称为 super.awakeFromNib() 然后添加了我的视图。
      • 如果您以编程方式添加视图,通常不会调用 awakeFromNib。这个问题是关于故事板视图
      • 是的,它是一个故事板视图,然后我想以编程方式添加一个视图。通常我可以调用viewDidLoad,但是这里的superview是nil,在awakeFromNib中也是
      猜你喜欢
      • 2020-04-28
      • 1970-01-01
      • 2012-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-14
      • 2012-08-12
      • 1970-01-01
      相关资源
      最近更新 更多