尝试访问TabBar时,IOS迅速致命错误nil异常

问题描述 投票:0回答:1

我有下面的tabBar,每个TabBars都属于它自己的特定UIViewController。我的问题在于我的Home Tab Bar。如果我在另一个TabBar项目中,如“搜索”或“通知”,并且返回到我的主页选项卡栏项目,那么TabBar有一个TableView,然后我希望我的TableView保持在同一个地方。我能够通过调用它来做到这一点

   controller.dismiss(animated: false, completion: nil)

但是你可以从下面的图片中看到我的主页标签栏项目没有突出显示,我创建了一个方法,试图突出显示我的主页选项卡,但我得到一个零例外。首先让我告诉你我的自定义功能所有Tab Bar项目点击进入这里

class HomeProfile: NSObject {
var mycontroller = ControllerEnum()


func TabBarLogic(_ tabBar: UITabBar, didSelect item: UITabBarItem, streamsModel: Int, controller: UIViewController) {

    if tabBar.items?.index(of: item) == 0 {
          tabBar.tintColor = UIColor(hexString: "#004d99")

        if TabBarCounter == 0 {
   // To Refresh 
            let nextViewController = controller.storyboard?.instantiateViewController(withIdentifier: "HomeC") as! HomeC
            controller.present(nextViewController, animated:false, completion: nil)
        } else {
// keeps TableView position but does not highlight Tab           
            controller.dismiss(animated: false, completion: nil)
            let Home = HomeC()
            Home.HighlightTabBar() // Nil exception here
            TabBarCounter = 0
        }

    }
    if tabBar.items?.index(of: item)! == 1 {
        // Search Tab Item
        tabBar.tintColor = UIColor(hexString: "#004d99")
        let nextViewController = controller.storyboard?.instantiateViewController(withIdentifier: "LocalSearchC") as! LocalSearchC
        controller.present(nextViewController, animated:false, completion:nil)
                      TabBarCounter = 1
    }
    if tabBar.items?.index(of: item)! == 2 {
      // Post
    }
    if tabBar.items?.index(of: item)! == 3 {
         // Notification
    }
    if tabBar.items?.index(of: item)! == 4 {
        // Menu
    }

}
  }

此功能与facebook类似,如果您在主页上并再次单击“主页”选项卡,则它将刷新TableView,但如果您在另一个选项卡上并返回“主页”选项卡,它将保持您的位置; TabBarCounter检查它。

好的,这是Tab的Home Controller代码

class HomeC: UIViewController,UITableViewDataSource,UITableViewDelegate, UITabBarDelegate{

 @IBOutlet weak var TabBar: UITabBar!

 override func viewDidLoad() {
        super.viewDidLoad()
TabBar.delegate = self
      TabBar.selectedItem = TabBar.items![0]
       TabBar.tintColor = UIColor(hexString: "#004d99")
}

  func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
        homeProfile.TabBarLogic(tabBar, didSelect: item, streamsModel: TabCounter,controller: self)

}

func HighlightTabBar() {
    TabBar.delegate = self 
    TabBar.selectedItem = TabBar.items![0] // this fails
    TabBar.tintColor = UIColor(hexString: "#004d99")
}

}

我知道它失败的原因是因为HighlightTabBar()中的TabBar在调用它时没有对TabBar的引用。我怎样才能做到这一点。我一直在看这一个How to programmatically change UITabBar selected index after Dismiss?但到目前为止没有任何作用。

enter image description here

swift swift4 uitabbar uitabbaritem nsobject
1个回答
0
投票

将代码放在App委托或按钮操作中

let appDelegate = UIApplication.shared.delegate as! AppDelegate
let tabBarController = appDelegate.window?.rootViewController as! UITabBarController
tabBarController.selectedIndex = 2
© www.soinside.com 2019 - 2024. All rights reserved.