重新选择选项卡时,刷新UITabBar选项卡的视图或从UITabBar选项卡的视图中调用方法

pur*_*ion 6 iphone cocoa-touch objective-c uitabbarcontroller ios

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

我知道在UITabBarDelegate中有一个方法应该在选项卡切换发生之前或之后被调用,但我不知道这是否是在重新激活时从选项卡视图中触发方法调用的方法标签.我不知道如何从委托中访问选项卡视图的已经活动的实例.任何方向都会有很大帮助!

sup*_*ssi 13

使用UITabBar时,除非收到内存警告且必须取消分配,否则您的视图将保持活动状态.因为它们一直处于活动状态,所以viewDidLoad只会被调用一次(除非您的视图由于内存警告而被卸载).

每次在屏幕上显示/确实显示视图时,都会调用viewWillAppear和viewDidAppear,因此您可以在此处刷新视图或数据.

viewWillAppear最好在您希望在用户看到视图之前更新任何内容的实例中使用.例如,设置UILabels或UITextFields以清除数据.这样可以防止用户在清除旧数据之前快速查看旧数据.在此方法中运行将使用大量系统资源或花费很长时间(即web服务)的任何内容都可能会降低您的应用程序速度并阻止您同时显示UIActivityIndi​​cator,因为这是在视图实际出现之前.

viewDidAppear对于已经显示视图后可以更新的任何内容都很有用,例如上一个示例中的webservices.