以编程方式选择tabbar项并显示指标图像

时间:2017-11-12 14:41:44

标签: swift uiviewcontroller uitabbar uitabbaritem

我使用的是UITabBar,而不是UITabBarController。每当用户点击任何标签时,我都能看到带下划线的图片。

public override func viewDidLoad() {
    super.viewDidLoad()
    UITabBar.appearance().selectionIndicatorImage = getImageWithColorPosition(color: UIColor.darkGray, size: CGSize(width:presenterView.frame.size.width/2, height:49), lineSize: CGSize(width:presenterView.frame.size.width/2, height:2))
}

// getImageWithColorPosition用于在UITabBarItem下添加带下划线的图像

func getImageWithColorPosition(color: UIColor, size: CGSize, lineSize: CGSize) -> UIImage {
    let rect = CGRect(x: 0, y: 0, width: size.width, height: size.height)
    let rectLine = CGRect(x: 0, y: size.height-lineSize.height, width: lineSize.width, height: lineSize.height)
    UIGraphicsBeginImageContextWithOptions(size, false, 0)
    UIColor.clear.setFill()
    UIRectFill(rect)
    color.setFill()
    UIRectFill(rectLine)
    let image = UIGraphicsGetImageFromCurrentImageContext()!
    UIGraphicsEndImageContext()
    return image
}

public override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    openItem1()
}

public func  tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
    if (item.tag == 0) {
        openItem1()
    } else {
        openItem2()
    }
}

但是,当用户点击任何标签项时,只显示带下划线的图像。我想在用户第一次登陆屏幕时选择默认选项卡。正如我以编程方式执行此操作时,下划线图像不会显示。我读了几个堆栈溢出帖子,说UITabBar上的选择不能以编程方式触发。

还有其他方法吗?

1 个答案:

答案 0 :(得分:0)

如果我正确理解了问题,您希望以编程方式在用户打开应用时在UITabBar上选择一个标签。您可以在AppDelegate内执行此操作,例如didFinishLaunchingWithOptions

在我的项目中,我会跳转到tabbar控制器中的标签,具体取决于某些通知等事件。在AppDelegate内部,我使用以下代码以编程方式选择一个选项卡:

if let tabbarController = self.window?.rootViewController as? UITabBarController {
    tabbarController.selectedIndex = 0
}

默认情况下,如果应用程序是从冷启动启动的,那么所选项目将是索引为0的项目,如果应用程序位于之前已打开并且保存在应用程序切换器中,则最后打开的选项卡将是。

希望这就是你要找的东西。