单击 UITabBarController 按钮触发图像选择器

Trigger image picker on UITabBarController button click

我在 storyboard 中制作了一个 tabbar,其中包含 4 个栏项目,我通过右键单击拖动并设置 viewcontroller segue 将它们全部连接到其他视图控制器。现在对于第二个按钮,我想显示 imagepicker 而不是 viewcontroller。当我从 UITabBarController 中的情节提要中删除第二个 segue 时,我的第 4 个栏项目消失了。

这是我的 tabview 控制器

class BaseTabBarController: UITabBarController, UITabBarControllerDelegate {
    let arrayOfImageNameForUnselectedState = ["home", "explore", "addIcon", "notification", "accountIcon"]
    let arrayOfImageNameForSelectedState = ["homeFilled", "exploreFilled", "addIcon", "notificaitonFilled", "accountIcon"]

    override func viewDidLoad() {
        super.viewDidLoad()
        self.delegate = self

        if let count = self.tabBar.items?.count {
            for i in 0..<count {
                let imageNameForSelectedState   = arrayOfImageNameForSelectedState[i]
                let imageNameForUnselectedState = arrayOfImageNameForUnselectedState[i]

                self.tabBar.items?[i].selectedImage = UIImage(named: imageNameForSelectedState)?.withRenderingMode(.alwaysOriginal)
                self.tabBar.items?[i].image = UIImage(named: imageNameForUnselectedState)?.withRenderingMode(.alwaysOriginal)
            }
        }

    }

    override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {

        if tabBar.items?.index(of: item) ?? 0 == 2 {
            //Clicked add tab, cancel segue and show imagepicker
        } else {
            selectedTabindex = tabBar.items?.index(of: item) ?? 0
        }
    }
}

如何在点击第二个栏按钮时显示图像选择器

不要从情节提要中删除第二个 segue 放置虚拟视图控制器以在标签栏内显示标签按钮。在 UITabBarController 的子类中实现 UITabBarController 控制器的委托方法,在第二个 viewcontroller 的 shouldSelect 方法中实现 return false,并在那里呈现 ImagePicker 视图。

代码:

class BaseTabBarController : UITabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()
        self.delegate = self
    }

    override var prefersStatusBarHidden: Bool {
        return false
    }

}

extension BaseTabBarController : UITabBarControllerDelegate {

    func  tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
        if self.viewControllers?.index(of:viewController) == 1 {
            // TO Do code for Image Picker and Present it 
            return false
        } else {
            return true
        }
    }

    func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {

    }

}