UIPageViewController - 通过警报验证页面

时间:2013-04-13 21:02:35

标签: ios objective-c uipageviewcontroller

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

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

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

感谢迈克尔,我已将此添加到我的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 个答案:

答案 0 :(得分:0)

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

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

或者,您现在可以继承“UIPageViewController”,并且在子类控制器中,您可以定义新的委托协议(包含所有原始UIPageViewControllerDelegate“方法),并且您可以添加自己的”{ {1}}“协议方法。

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