Один ViewController, несколько элементов tabBar - PullRequest
0 голосов
/ 19 октября 2018

У меня есть tabBar с одним элементом на данный момент.Для этого элемента у меня есть ViewController.

Теперь я хотел бы динамически добавить больше элементов на панель вкладок, которые должны открывать один и тот же ViewController.Внутри viewcontroller я проверю, какая кнопка была нажата, и настрою содержимое.

Как добавить дополнительные элементы на панель вкладок, ссылающуюся на тот же Viewcontroller?

Я пытался просто добавить UITabBarItems как список, но это не сработает.

Любой совет?

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Хотя мне не нравится ваше первоначальное представление о нескольких ЖЕ VC в tabController, на самом деле это выполнимо.

    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 секунд вы можете видеть, что у вас есть 5 одинаковых VC в вашем tabController.

0 голосов
/ 19 октября 2018

Вы должны иметь возможность подкласса 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 контроллеров, вам потребуетсяиспользуйте свойство moreNavigationController в своем подклассе UITabBarController.

Я рекомендую прочитать документацию для UITabBarController , чтобы получить представление о том, как все это сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...