一个ViewController,多个tabBar项

时间:2018-10-18 21:14:32

标签: ios swift xcode uitabbarcontroller

我现在有一个带有一个项目的tabBar。对于这个项目,我有一个ViewController。

现在,我想向选项栏动态添加更多项目,这些项目都应打开相同的ViewController。我将在ViewController中检查按下了哪个按钮并自定义内容。

如何在链接到同一Viewcontroller的标签栏中添加更多项目?

我试图仅将UITabBarItem添加为列表,但这无法解决问题。

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

您应该能够继承UITabBarController并使用viewControllers属性或setViewController(_:animated:)中的viewDidLoad方法。我建议使用.nib布置ViewController,并使用init(nibName: String?, bundle: Bundle?)实例化它。

与其让ViewController根据其tabBarItem属性来确定配置,不如让该配置发生在设置viewController上的UITabBarController属性之前。

类似的东西:

class TabBarController: UITabBarController {
  override func viewDidLoad() {
    super.viewDidLoad()

    var controllers = [UIViewController]()

    let firstViewController = ViewController(nibName: "NIBNAME", bundle: Bundle.main)
    // Configure unique properties for firstViewController here, including
    // the tabBarItem.
    controllers.append(firstViewController)

    // Configure the rest of the ViewControllers with unique properties and add them to controllers

    setViewControllers(controllers, animated: false)
  }
}

另外,请注意,如果您有5个以上的控制器,则需要在UITabBarController子类中使用moreNavigationController属性。

我建议您read the documentation for UITabBarController了解如何完成所有这些操作。

答案 1 :(得分:0)

尽管我不喜欢您最初在tabController中使用多个SAME VC的想法,但实际上是可行的。

    import UIKit

    class MyTabViewController : UIViewController{
       override var  tabBarItem: UITabBarItem!{
        get{ return  UITabBarItem.init(title: "temp", image: nil, tag: 100) }
        set{ super.tabBarItem  = newValue} }
    }

    class MyTabController: UITabBarController {

        override func viewDidAppear(_ animated: Bool) {
            super.viewDidAppear(animated)
            perform(#selector(change), with: nil, afterDelay: 3.0)
            perform(#selector(printViewController), with: nil, afterDelay: 5.0)
        }

            @objc func printViewController(){
            print (viewControllers!)
            }

        @objc func change(){
            if let viewController = self.viewControllers?[0]{
               let label = UILabel.init(frame: CGRect.init(x: 0, y: 0, width: 100, height: 100))
                label.text = "testing"
                viewController.view.addSubview(label)
                setViewControllers([viewController,viewController,viewController,viewController,viewController], animated: true)
            }
        }
    }

5秒后,您可以看到您的tabController中有5个相同的vc。