Пользовательский UITabBarController - проблема делегата DidSelect / AnyCustomization - PullRequest
0 голосов
/ 12 октября 2019

Я создал собственный класс TabBar, но у меня мало проблем, как я могу вызвать любую функцию из этого класса, когда, например, вкладка скрыта? (Я хотел бы скрыть свою полосу, когда панель вкладок скрыта) Также, когда я использую tabBarController?.selectedIndex = 3, делегат didSelect не вызывается, как я могу это решить? Это мой простой код. Спасибо за любую помощь

class customTabBar: UITabBarController {


var stripe = UIView()

override func viewDidLoad() {
    super.viewDidLoad()

    let cellWidth = tabBar.frame.width/5
    stripe = UIView(frame: CGRect(x: 0, y: tabBar.frame.minY + 20, width: (tabBar.frame.width/5) * 0.6, height: 6))
    stripe.center.x = cellWidth/2
    stripe.applyGradient(colours: [UIColor.init(hexFromString: "5897ee"),UIColor.init(hexFromString: "5228d8")])
    stripe.layer.cornerRadius = 2
    stripe.layer.masksToBounds = true
    self.view.addSubview(stripe)

}

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

    let index: Int = item.tag + 1
    let cellWidth = tabBar.frame.width/5
    let newPostion = cellWidth * CGFloat(index)

    UIView.animate(withDuration: 0.3, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 0.3, options: .curveEaseInOut, animations: {

        self.stripe.center.x = newPostion - (cellWidth/2)

    })
}

}

1 Ответ

0 голосов
/ 12 октября 2019
class MyTabBarController: UITabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()

        //Add the stripe to tabBar,so it will hidden when tabBar hidden
        let cellWidth = tabBar.frame.width/5
        let stripe = UIView(frame: CGRect(x: 0, y: tabBar.frame.minY + 20, width: (tabBar.frame.width/5) * 0.6, height: 6))
        stripe.center.x = cellWidth/2
        stripe.layer.cornerRadius = 2
        stripe.layer.masksToBounds = true
        self.tabBar.addSubview(stripe)

    }

    //use this to observe tabBarController?.selectedIndex = 3
    override var selectedIndex: Int{
        didSet{
            //do what you want
        }
    }
}

extension UIViewController {

    //use this to call get MyTabBarController instance and call any function
    var myTabBarcontroller : MyTabBarController?{
        get{
            return self.tabBarController as? MyTabBarController
        }
    }
}
...