【问题标题】:Selected item by default on TabBar is not getting highlighted默认情况下,TabBar 上的选定项目未突出显示
【发布时间】:2019-06-13 12:31:06
【问题描述】:

我正在使用带有两个项目的 TabBar。我在 .xib 文件上创建它并以编程方式设置 ViewControllers。我可以选择默认的 VC:

    selectedIndex = 0

现在的问题是 tabBar 没有突出显示所选项目的图标。

我在 TabBarController 的 viewDidLoad() 上设置了 VC:

    let firstViewController = FirstViewController(nibName: "FirstViewController", bundle: nil)
    let secondViewController = SecondViewController(nibName: "SecondViewController", bundle: nil)
    self.viewControllers = [firstViewController, secondViewController]

这是在每个 VC 上创建项目的代码:

    let tabBarItem = UITabBarItem(title: "First", image: #imageLiteral(resourceName: "firstImage"), selectedImage: nil)
    self.tabBarItem = tabBarItem

默认情况下不只是选定的索引不突出显示,有时它只显示其中一个,直到我点击tabBar。

编辑:

我添加了三张图片。

第一个是在加载 VC 之后拍摄的。未点击任何项目,以编程方式选择索引 0 并且 VC 按预期显示。

第二个是在点击第二个项目后,它会显示,但两者都没有突出显示。

第三个是再点一次之后,现在不管按哪个,高亮都起作用了。

编辑 2:

我添加了一个视频:

HERE

【问题讨论】:

  • 你在哪里将selectedImage分配给tabbarItem?
  • 我没有分配它。我已经尝试过,它在选择时会更改图像,然后在未选择时返回到另一个图像。但突出问题仍然存在。
  • 试试tabbar.selectedIndex = 0 ?在TabBarController 类中写self.selectedIndex = 0。不要再创建一个tabbarItem,因为您已经在xib 中设置了。
  • self.selectedIndex = 0 已经在我的 tabBarController 类上。我真的不明白你想说什么对不起。
  • @TheTiger Monty 的回答很有帮助。我认为问题在于在每个 VC 上创建选项卡项,因此 TabBar 在第一次加载之前不知道第二个 VC 有什么图标。感谢您的帮助。

标签: swift xcode tabbarcontroller


【解决方案1】:

您必须将图像分配给 selectedIndex tabBar 项目,如下所示

  let myTabBarItem1 = (self.tabBar.items?[0])! as UITabBarItem
  myTabBarItem1.image = UIImage(named: "Unselected")?.withRenderingMode(UIImageRenderingMode.alwaysOriginal)
  myTabBarItem1.selectedImage = UIImage(named: "Selected ")?.withRenderingMode(UIImageRenderingMode.alwaysOriginal)
  myTabBarItem1.title = "First"


  let myTabBarItem2 = (self.tabBar.items?[1])! as UITabBarItem
  myTabBarItem2.image = UIImage(named: "Unselected")?.withRenderingMode(UIImageRenderingMode.alwaysOriginal)
  myTabBarItem2.selectedImage = UIImage(named: "Selected")?.withRenderingMode(UIImageRenderingMode.alwaysOriginal)
  myTabBarItem2.title = "Second"

【讨论】:

  • 好的,它成功了。我只需要删除 selectedImage 行,因为我真的不想更改它。如果我只是指定图像,则 tabBar 本身在选择时使用突出显示的图标,在未选择时使用它的“禁用”版本。我不知道是否有一种“更清洁”的方法可以做到这一点,但到目前为止它有效,谢谢。
【解决方案2】:

只需将图片和选中图片设置为tabBarItem,见以下代码。

  let myTabBarItem1 = (self.tabBar.items?[0])! as UITabBarItem
  myTabBarItem1.image = UIImage(named: "Unselected")?.withRenderingMode(UIImageRenderingMode.alwaysOriginal)
  myTabBarItem1.selectedImage = UIImage(named: "Selected ")?.withRenderingMode(UIImageRenderingMode.alwaysOriginal)
  myTabBarItem1.title = "First"


  let myTabBarItem2 = (self.tabBar.items?[1])! as UITabBarItem
  myTabBarItem2.image = UIImage(named: "Unselected")?.withRenderingMode(UIImageRenderingMode.alwaysOriginal)
  myTabBarItem2.selectedImage = UIImage(named: "Selected")?.withRenderingMode(UIImageRenderingMode.alwaysOriginal)
  myTabBarItem2.title = "Second"

    for tabBarItem in tabBar.items! {
        tabBarItem.imageInsets = UIEdgeInsets(top: 6, left: 0, bottom: -6, right: 0)
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-25
    相关资源
    最近更新 更多