UIPageViewController - 使用警报验证翻页

Posted

技术标签:

【中文标题】UIPageViewController - 使用警报验证翻页【英文标题】:UIPageViewController - Verifying Page Turn with alert 【发布时间】:2013-04-13 21:02:34 【问题描述】:

我正在使用 UIPageViewController 处理数据输入,其中最后一页是活动记录,前一页是无法编辑的旧记录。所以我需要一种方法来验证用户是否想离开最后一页,同时允许所有其他页面照常导航。

理想情况下,我真的可以使用 -(BOOL)pageShouldTurn 方法,但它不存在。

有谁知道一种方法来检测页面是否即将卸载然后根据某些条件停止页面翻转?我对手势识别器方法没有任何运气,因为即使设置了委托,它们似乎也没有被触发。

感谢 Michael,我已将此添加到我的 pageViewController 中,这正是我需要的:

-(void)pageViewController:(UIPageViewController *)pvc willTransitionToViewControllers:(NSArray *)pendingViewControllers

    if ([pvc.viewControllers.lastObject pageIndex] == [self.pageDataSource.allObjects count]) 
        UIAlertView *alertDialog;
        alertDialog = [[UIAlertView alloc]
                       initWithTitle:@"Are You Done?"
                       message:@"Once you leave this page you can't edit this record again"
                       delegate:self
                       cancelButtonTitle:@"OK"
                       otherButtonTitles: nil];
        [alertDialog show];
    

因此,警告框只会阻止页面翻动一次。当它被关闭时,用户可以更改页面。我的版本会检查以确保这只发生在最后一页,您可以删除“if”语句并在每次翻页时发出警报,但这会很烦人。

【问题讨论】:

【参考方案1】:

在我看来至少有两种选择。

第一,你有"- (void)pageViewController:(UIPageViewController *)pageViewController willTransitionToViewControllers:(NSArray *)pendingViewControllers"。您也许可以在那里捕捉到转换并拒绝/强制重置旧页面。

或者,您现在可以将“UIPageViewController”子类化,在子类化控制器中,您可以定义一个新的委托协议(包含所有原始的 UIPageViewControllerDelegate" 方法),您可以添加自己的“-(BOOL) pageShouldTurn”协议方法。

这两种可能性都需要 ios 6。

【讨论】:

谢谢迈克尔,看起来都是不错的选择。让我玩它,我会回复你的。 (我正在使用 iOS 6,所以没有问题) 我不知道 willTransitionToViewControllers 方法,所以非常感谢!然后我必须确定我当前的页面并不太难。我在上面添加了我的最终方法,以帮助其他可能需要此方法的人。再次感谢!

以上是关于UIPageViewController - 使用警报验证翻页的主要内容,如果未能解决你的问题,请参考以下文章

UIPageviewController 使用 Storyboard 崩溃

在故事板中使用 UIPageViewController

使用 UIPageViewController 在多个视图控制器之间滑动

使用 UIPageViewController 创建网格/地图

禁用 UIPageViewController 反弹

如何让 UIPageViewController 使用过渡样式滚动?