ios - 如何仅在通过更改标签栏索引使屏幕可见时执行代码,但现在当另一个显示的模态屏幕在其上消失时?

标签 ios swift

所以我的应用程序是一个由 3 个选项卡组成的选项卡栏应用程序。我想要实现的是在从选项卡栏中选择第三个选项卡时刷新它的屏幕。为此,我覆盖了 viewWillAppear(..) 并在那里添加了我的代码。

但是 viewWillAppear(..) 在已经显示的第 3 个选项卡屏幕上关闭模态屏幕时,或者在显示屏幕时选择照片时也会被调用,我不想那个。

将我的自定义代码移动到 viewDidLoad() 也不起作用,因为 viewDidLoad(..) 只被调用一次。 (正如我所说,每次选择时我都想刷新选项卡。

我已经尝试将我的代码移动到名为 initialise() 的自定义方法中,并让该方法执行以下操作:

override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
            ((self.viewControllers![2] as! UINavigationController).viewControllers[0] as! MyCustomViewController).initialise()

}

但它失败了,因为在我调用 initialise() 时 UI 元素尚未加载,它崩溃了。

知道如何实现吗?

最佳答案

给标签栏 Controller 一个委托(delegate)并实现这个方法:tabBarController(_:shouldSelect:)

https://developer.apple.com/documentation/uikit/uitabbarcontrollerdelegate/1621166-tabbarcontroller

它仅在通过从选项卡栏中进行选择而更改选项卡时准确调用。

关于ios - 如何仅在通过更改标签栏索引使屏幕可见时执行代码,但现在当另一个显示的模态屏幕在其上消失时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49774895/

相关文章:

ios - 我真的必须创建变量的两个版本才能使用 Objective-C block 吗?

ios - 在 Objective-C 中使用状态设计模式

swift - 在字符串显示中强制包含字符

IOS:将 UICollectionViews 放入 UIPageVieControllers 中

ios - 在第四代 iPad 上使用 Eureka Pod

iOS - 视频流,防止视频被下载或保存到本地

ios - CGBitmapContextGetData() 返回 NULL

ios - "The installed Xamarin.iOS (version 10.3) on the Mac Unnamed Server (...) is not compatible with the local Xamarin.iOS (version 10.4)"

swift - 在分数上加分 (Swift)

ios - 在 Core Data 中存储时间间隔的正确方法是什么?