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
Дайте каждому идентификатор и загрузите его, как указано выше.