如何解决UIPageViewController直接跳转到页面会导致实例变量出现问题
我对Swift还是比较陌生,他已经用JavaScript编写了很多代码,因此我在这里肯定会遗漏一些细微的东西。我有一个控制3个页面的UIPageViewController,并且每个页面都有一个由父UIPageViewController设置的特定实例变量。我们将该实例变量称为currentState
。我还有一个功能,允许用户直接跳到任何页面。但是,由于某种原因,当用户直接跳转到该页面时,调用currentState
时似乎未设置实例变量viewDidAppear
,即使在页面代码的其他部分中也检测到了该变量。
func goToPage(index: Int)
{
if index < viewControllers!.count
{
let destViewController = viewControllers![index]
(destViewController as! WorkflowController).currentState = DataStore.sharedStore.state
setViewControllers([destViewController],direction: .forward,animated: true,completion: nil)
}
}
在目标页面的viewDidAppear中,测试代码指示未设置状态,即使当用户滚动浏览页面而不跳转时也已正确设置了状态:
override func viewDidAppear(_ animated: Bool)
{
if let state = currentState
{
// Happens when user scrolls page by page until this one
print("State variable loaded")
}
else
{
// Happens when user jumps to page
print("State variable did NOT load")
}
}
设置中我缺少什么?
解决方法
我解决了我的问题。由于我是Swift的新手(不用担心UIPageViewController
),实际的“跳转到页面”是在其他地方完成的,而不是上面发布的goToPage
代码中。它实际上位于UIPageViewController's
viewDidLoad
部分中,如下所示。解决方案是在调用setViewControllers
函数进行“跳转”之前,确保目标控制器的所有实例变量都已设置:
override func viewDidLoad() {
super.viewDidLoad()
dataSource = self
// This is where we do a jump,if current page isn't the first page
if currentPage != 0
{
let firstViewController = orderedViewControllers[currentPage]
(firstViewController as! WorkflowController).currentState = DataStore.sharedStore.state
(firstViewController as! WorkflowController).delegate = self
setViewControllers([firstViewController],direction: .forward,animated: true,completion: nil)
return
}
// more code is omitted...
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。