【问题标题】:Refresh a UITabBar tab's view or call a method from the UITabBar tab's view when the tab is reselected重新选择选项卡时刷新 UITabBar 选项卡的视图或从 UITabBar 选项卡的视图调用方法
【发布时间】:2011-08-12 19:37:53
【问题描述】:

除了第一次切换到选项卡时,最初触发 ViewDidLoad 时,所有后续切换到(重新选择)该选项卡的操作似乎都不会触发 ViewDidLoad,也没有任何其他方法。该视图似乎被缓存并立即重新显示,就像用户离开该选项卡时离开的方式一样。但是,当用户重新选择特定选项卡时,我需要刷新其视图。因此,如果可能的话,我需要以某种方式从视图中触发一个方法,而无需额外的用户交互(在选项卡重新选择之后)。

我知道 UITabBarDelegate 中有一个方法应该在选项卡切换发生之前或之后被调用,但我不知道这是否是从选项卡视图中触发方法调用的方法重新激活所述选项卡。我不知道如何从委托中访问选项卡视图已经处于活动状态的实例。任何有关这方面的指导都会非常有帮助!

【问题讨论】:

    标签: iphone objective-c ios cocoa-touch uitabbarcontroller


    【解决方案1】:

    使用 UITabBar 时,您的视图会保持活动状态,除非收到内存警告并且必须释放它们。因为它们永远保持活动状态,所以 viewDidLoad 只会被调用一次(除非您的视图由于内存警告而被卸载)。

    viewWillAppear 和 viewDidAppear 将在每次该视图将/确实显示在屏幕上时被调用,因此这是您要刷新视图或数据的地方。

    viewWillAppear 最好用在您想在用户看到之前更新视图上的任何内容的情况下。例如,设置 UILabels 或 UITextFields 来清除数据。这将防止用户在旧数据被清除之前快速闪现。在这种方法中运行任何会使用大量系统资源或需要很长时间(即 web 服务)的东西可能会减慢您的应用程序,并会阻止您同时显示 UIActivityIndi​​cator,因为这是在视图实际出现之前。

    viewDidAppear 对于任何可以在视图显示后进行更新的东西都很有用,例如上一个示例中的 Web 服务。

    【讨论】:

    • 现在我很好奇动画 BOOL 在这两种方法中的用途。有什么特别或危险的事情我应该注意吗?
    • 动画 BOOL 是当视图出现时您将如何指示是否有动画发生。大多数视图之间的过渡都包含动画,因此过渡看起来并不起伏不定。在应用程序首次启动时显示的第一个视图上不使用动画更为常见。
    • @superjessi。可以得到 Web 服务响应吗?我正在使用 xml/soap,我想在切换选项卡时从 web 服务刷新和填充数据。
    【解决方案2】:

    我在我的一个应用程序中做同样的事情,我使用 viewWillAppearviewDidAppear 来完成此操作。

    似乎每次重新选择选项卡时都会调用它们。 (我创建了一个方法updateView,它在viewDidAppear 方法中被调用)

    【讨论】:

    • 啊哈!我一定把这两者弄混了。
    • @Faizan S. 你怎么称呼这个方法?你能解释更多吗。我希望在切换标签时调用网络服务。
    猜你喜欢
    • 2017-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    • 2014-07-28
    • 2012-08-14
    • 1970-01-01
    相关资源
    最近更新 更多