如果你直接实例化一个类(uiviewcontroller),通过初始化器,iboutlets就不会被连接。我的问题是我引用的是零
IBOutlet
导致撞车。
我有很多观察者在
vc1
,
vc2
和
vc3
(页)
UIPageViewController
)为了保持代码的整洁,我希望在
uipageview控制器
而不是在
viewDidLoad
属于
VC1
,
VC2
和;
VC3
.
但是,我不能引用
IBOutlets
的子视图
uipageview控制器
因为他们得了零分。有人对如何设置有什么建议吗
uipageview控制器
在某种程度上,我可以访问子视图
伊布斯特
?
我在更新屏幕上看不到的页面视图时遇到了问题,(例如:更新中的视图)
VC3
虽然
VC1
在屏幕上。是
uipageview控制器
这类目标的坏主意?我应该只制作一个用户可以浏览的大视图吗?
// UIPageViewController.swift
var vc1: ViewController1 = {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
return (storyboard.instantiateViewController(withIdentifier: "ViewController1") as? ViewController1)!
}()
var vc2: ViewController2 = {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
return (storyboard.instantiateViewController(withIdentifier: "ViewController2") as? ViewController2)!
}()
var vc3: ViewController3 = {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
return (storyboard.instantiateViewController(withIdentifier: "ViewController3") as? ViewController3)!
}()
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
if viewController == vc2 {
return vc1
} else if viewController == vc3 {
return vc2
}
return nil
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
if viewController == vc1 {
return vc2
} else if viewController == vc2 {
return vc3
}
return nil
}
func viewDidLayoutSubviews() {
// Adding observer for ViewController1
NotificationCenter.default.addObserver(self, selector: #selector(vc1.handleEventDataChange), name: .eventDataChanged, object: nil)
}
-
// ViewController1.swift
@IBOutlet weak var scoreBoard: UIView!
func viewDidLoad() {
super.viewDidLoad()
}
func handleEventDataChange() {
if scoreBoard.alpha != 0 { // <-- Crash here
// update scoreboard
}
}
编辑:
除了jrterton的答案,我还发现我在错误的类中添加了观察者。
NotificationCenter.default.addObserver(self, selector: #selector(vc1.handleEventDataChange), name: .eventDataChanged, object: nil)
应该是
NotificationCenter.default.addObserver(vc1, selector: #selector(vc1.handleEventDataChange), name: .eventDataChanged, object: nil)