【问题标题】:Effect of setting self.view = nil设置 self.view = nil 的效果
【发布时间】:2015-04-27 08:16:52
【问题描述】:

我有一个带有默认视图的视图控制器。

如果我只想丢弃视图而不是视图控制器,是否可以设置 self.view = nil?因此,该视图被丢弃,新视图被分配了新值。

我想用新的 UI 填充视图,基于我在 viewdidLoad 中执行的条件。因此,如果我设置 self.view = nil,并尝试从任何地方访问视图,它将再次创建视图。因此将设置新属性。

这是一种正确的方法吗?或者我必须编写一个单独的方法来使用新属性刷新视图。

请提供正确的方法。

【问题讨论】:

  • 是否推荐从自身移除视图并将其设置为 nil 的方法?

标签: ios iphone uiview uiviewcontroller


【解决方案1】:

不要删除 uiviewcontroller 附带的默认视图。如果您想根据条件显示自定义uiview,那么我建议您创建自定义uiview,然后对其进行初始化并将其添加到相应条件的默认视图中。

【讨论】:

    【解决方案2】:

    我认为没有正确的方法,但这里有一些建议。

    不要中断视图生命周期(确保-viewWillAppear:-viewDidAppear:-viewWillDisappear:-viewDidDisappear: 都被调用)。

    考虑包含在自定义容器视图控制器中的多个视图控制器,而不是交换视图。它将使每个视图控制器专注于特定任务。

    考虑有一个空的self.view 并使用-addSubview:/-removeFromSuperview 交换内容。这样你就不需要重置self.view

    【讨论】:

    • 那么,除了您在上面建议的 viewcontroller 遏制之外,您认为在我的问题中应该遵循什么?
    • @user2634244 这取决于你有多少时间。多个视图控制器将是一个更大的重构,但会创建更好、更可维护的代码。交换子视图会更快,但会创建一个更难维护的视图控制器。
    猜你喜欢
    • 1970-01-01
    • 2011-10-14
    • 2020-02-26
    • 2017-12-05
    • 2017-11-21
    • 2012-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多