Swift: XLPagerTabStrip: ButtonBarPagerTabStripViewController: ChildViewController IBOutlets не установлены

Xcode -> 9.4.1, iOS -> 11.4, XLPagerTabStrip -> 8.0.1

Я хотел создать лучшие вкладки прокрутки (как в Android) в IOS с помощью Swift.

Я использую ButtonBarPagerTabStripViewController из библиотеки XLPagerTabStrip. Ниже приведен код:-

class ParentViewController: ButtonBarPagerTabStripViewController {

    override func viewControllers(for pagerTabStripController: PagerTabStripViewController) -> [UIViewController] {

        return [ChildOneViewController(), ChildTwoViewController(), ChildThreeViewController()]

    }

}

Теперь все работает нормально, для трех дочерних контроллеров создаются три вкладки прокрутки, которые меняются при пролистывании влево и вправо. Но когда я создал метку в раскадровке для первого childviewcontroller и создал IBOutlet для этой метки в классе ChildOneViewController. Эта метка не установлена ​​и печатается ноль в viewdidload, viewdidappear. Код выглядит так:

class ChildOneViewController: UIViewController, IndicatorInfoProvider {

    @IBOutlet weak var label: UILabel!   // This label i have set from storyboard.

    func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo {

        return IndicatorInfo(title: "CHILD ONE")

    }

    override func viewDidLoad() {
        super.viewDidLoad()

        print(self.label) // This is printing nil to console.

   }

   override func viewDidAppear(_ animated: Bool) {
       super.viewDidAppear(animated)

       print(self.label) // This is also printing nil to console.

   }

}

1 ответ

Решение

Если vcs созданы в IB, то не используйте

ChildOneViewController()

но использовать

let ch1 = self.storyboard?.instantiateViewController(withIdentifier: "childOneId") as! ChildOneViewController

Дайте каждому идентификатор и загрузите его, как указано выше.

Другие вопросы по тегам