我有三个视图控制器。
第一个VC名称是VC1(初始视图控制器),其中具有标签和容器视图。
第二个VC(VC2)是一个嵌入在VC1容器视图内的PageViewController。
第三VC(VC3)是VC2的内容页面。
class VC1: UIViewController, DelegateClass1{
func setText(_ index: Int) {
lblIndex.text = "\(index)"
}
...
}
protocol DelegateClass1: class {
func setText(_ index:Int)
}
class VC2: UIPageViewController,UIPageViewControllerDelegate,UIPageViewControllerDataSource, DelegateClass2 {
func setTextFromVC3(_ index: Int) {
delegateClass1?.setText(index)
}
var delegateClass1:DelegateClass1?
...
}
protocol DelegateClass2: class {
func setTextFromVC3(_ index:Int)
}
class VC3: UIViewController {
var delegateClass2: DelegatClass2?
override func viewDidAppear(_ animated: Bool) {
delegateClass2?.setTextFromVC3(pageIndex)
}
...
}
问题:
通过滚动更改VC2的当前页面后,我希望新页面的索引显示在VC1的标签内,因此我将此命令放入VC3的didAppear事件中。我在模拟器上对其进行了多次测试,并且它花了很多秒钟来更新标签文本。我不使用任何异步方法。问题出在哪里?
谢谢。
修改:
我的问题的一个新发现:我看到当我使用Page Curl而不是Scroll作为VC2的过渡样式时,不存在延迟问题,但是我不希望这种过渡样式。
答案 0 :(得分:0)
您是否尝试使用UIPageViewControllerDelegate
更新标签?使您的VC1
符合UIPageViewControllerDelegate
,并在将页面视图控制器实例嵌入VC1
容器中之前设置委托。然后覆盖此方法:
- (void)pageViewController:(UIPageViewController *)pageViewController
didFinishAnimating:(BOOL)finished
previousViewControllers:(NSArray<UIViewController *> *)previousViewControllers
transitionCompleted:(BOOL)completed {
if (finished) {
lblIndex.text = "\(index)"
}
}
}