Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/99.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 访问TabBarController_Ios_Swift - Fatal编程技术网

Ios 访问TabBarController

Ios 访问TabBarController,ios,swift,Ios,Swift,我有一个带有5个图标的TabBarController。在所有5个ViewController中,我都有冗余代码来更新TabBarController的徽章 func updateBadges(tabBarController : UITabBarController) { (tabBarController!.tabBar.items![0] as! UITabBarItem).badgeValue = getBadgeValueFor(0) (tabBarController!.tabBar

我有一个带有5个图标的TabBarController。在所有5个ViewController中,我都有冗余代码来更新TabBarController的徽章

func updateBadges(tabBarController : UITabBarController) {
(tabBarController!.tabBar.items![0] as! UITabBarItem).badgeValue = getBadgeValueFor(0)
(tabBarController!.tabBar.items![1] as! UITabBarItem).badgeValue = getBadgeValueFor(1)
(tabBarController!.tabBar.items![3] as! UITabBarItem).badgeValue = getBadgeValueFor(3)
(tabBarController!.tabBar.items![4] as! UITabBarItem).badgeValue = getBadgeValueFor(4)}
这是我的冗余代码:

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)

    self.latestTableOverView.reloadData()

    // Update the badge:
    self.updateBadges()
}

func updateBadges() {

    (tabBarController!.tabBar.items![0] as! UITabBarItem).badgeValue = getBadgeValueFor(0)
    (tabBarController!.tabBar.items![1] as! UITabBarItem).badgeValue = getBadgeValueFor(1)
    (tabBarController!.tabBar.items![3] as! UITabBarItem).badgeValue = getBadgeValueFor(3)
    (tabBarController!.tabBar.items![4] as! UITabBarItem).badgeValue = getBadgeValueFor(4)
}
getBadgeValueFor
是我的
helper.swift
文件中的一个函数:

import UIKit
import Foundation

func getBadgeValueFor(wich: Int) -> String? {
    // calculating the badge here...
}
:
// more stuff here

为了减少代码冗余,我想将
updateBadges
也移到我的助手类中。但是从那里,我无法访问Tabbar控制器。因此,如果我只是简单地将fun
updateBadges
复制到我的助手文件中,它将不起作用

在helper类中创建一个函数,该函数将
viewController
实例作为参数。 然后从视图控制器调用该函数,并将self作为参数。 在helper类的函数中,您可以从
viewController
实例访问
tabBarController

助手类:

func update_badge(vc : ViewController)
{

    vc.tabBarController .../// access like this

}
*代码可能有语法错误

  • 您可以将tabBarController本身作为参数传递给该方法,只需从视图控制器调用该方法即可

    func updateBadges(tabBarController : UITabBarController) {
    (tabBarController!.tabBar.items![0] as! UITabBarItem).badgeValue = getBadgeValueFor(0)
    (tabBarController!.tabBar.items![1] as! UITabBarItem).badgeValue = getBadgeValueFor(1)
    (tabBarController!.tabBar.items![3] as! UITabBarItem).badgeValue = getBadgeValueFor(3)
    (tabBarController!.tabBar.items![4] as! UITabBarItem).badgeValue = getBadgeValueFor(4)}
    
  • 如果只想在选项卡更改时更改徽章,可以将父视图控制器或应用程序代理设置为
    UITabBarControllerDelegate
    ,并在
    tabBarController:didSelectViewController:
    方法中调用更新徽章方法。 但是,您仍然需要在委托类中保留对选项卡栏控制器的引用,并将选项卡栏控制器作为参数传递给update badges方法

  • 但将选项卡栏控制器传递给该方法会限制您仅从直接访问选项卡栏控制器对象的上下文调用它。为了避免这种情况,可以在helper类中引用选项卡栏控制器。和添加方法来注册用于更新的选项卡栏

    static var myTabBarController : UITabBarController?
    
    static func registerTabBarController(tbc : UITabBarController) {
    myTabBarController = tbc}
    
  • 如果是根视图,则必须从父视图或从应用程序委托注册选项卡栏控制器

    然后可以对此对象执行所有更新

    static func updateBadges() {
    
        (myTabBarController?.tabBar.items![0] as! UITabBarItem).badgeValue = getBadgeValueFor(0)
        (myTabBarController?.tabBar.items![1] as! UITabBarItem).badgeValue = getBadgeValueFor(1)
        (myTabBarController?.tabBar.items![3] as! UITabBarItem).badgeValue = getBadgeValueFor(3)
        (myTabBarController?.tabBar.items![4] as! UITabBarItem).badgeValue = getBadgeValueFor(4)
    }
    
    可选调用确保即使未设置选项卡栏控制器对象,也不会崩溃。 对象和静态函数可以确保不必实例化帮助器