我有两个按钮可用于在UIPageViewController
中启动页面转换。我以编程方式开始从一个页面转换到另一个页面:
//to go left
[_pageVC setViewControllers:@[[self pageViewController:_pageVC viewControllerBeforeViewController:[_pageVC.viewControllers lastObject]]]
direction:UIPageViewControllerNavigationDirectionReverse
animated:YES
completion:^(BOOL finished) { }];
问题在于按钮的位置使得很容易快速点击它们几次,这会导致不必要的行为甚至崩溃应用程序。所以我想在页面转换时停用它们。
出于这个目的,我创建了一个BOOL
,我在动画开始时将其设置为YES
,但我不知道将它再次设置为NO
的位置。上面函数中的completition块过早调用,如果以编程方式启动转换,则不会调用pageViewController:didFinishAnimating:previousViewControllers:transitionCompleted:
(来自文档:Called after a gesture-driven transition completes
)。
如何在执行转换时停用按钮?
答案 0 :(得分:0)
我使用了pbasdf中的解决方案来禁用按钮,但它可能已经正常工作了。我意识到问题不在于按钮的禁用,而是刷卡仍处于活动状态,导致奇怪的行为。
当使用this method启用/禁用按钮时,我禁用并启用滑动:
-(void)setPVScrollEnabled:(BOOL)scrollEnabled
{
for (UIScrollView *view in self.pageViewController.view.subviews) {
if ([view isKindOfClass:[UIScrollView class]]) {
view.scrollEnabled = scrollEnabled;
}
}
}
答案 1 :(得分:0)
添加超时。例如,禁用按钮0.5秒:
self.buttonNext.enabled = NO;
self.buttonPrev.enabled = NO;
[_pageVC setViewControllers:@[[self pageViewController:_pageVC viewControllerBeforeViewController:[_pageVC.viewControllers lastObject]]]
direction:UIPageViewControllerNavigationDirectionReverse
animated:YES
completion:nil];
__weak YourClass *weakSelf = self;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
weakSelf.buttonNext.enabled = YES;
weakSelf.buttonPrev.enabled = YES;
});