簡體   English   中英

如何在UIPageViewController中設置第一頁

[英]How to set first page in UIPageViewController

當用戶在UIPageViewController的第一頁上並嘗試返回時,我只返回nil。 在iOS 5中,這很好用。 它導致iOS 6崩潰。

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'The number of view controllers provided (0) doesn't match the number required (1) for the requested transition'

這是我的代碼。 返回contentViewController而不是nil ,它工作正常。 我該怎么辦而不是nil

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController 
  viewControllerBeforeViewController:(UIViewController *)viewController {

    contentViewController = [[ContentViewController_iPhone alloc] init];

    int currentIndex = [self.modelArray indexOfObject:[(ContentViewController_iPhone *)viewController labelContents]];

    if ((currentIndex == 0) || (currentIndex == NSNotFound)) {

        //if on the first page, can't go back
        return nil;

     }

    contentViewController.labelContents = [self.modelArray objectAtIndex:currentIndex - 1];

    return contentViewController;

}

我遇到了同樣的問題,並且發現只有當我將pageviewcontrollers gestureRecognizers的代理更改為我自己的控制器時才會發生這種情況(如果你想在用戶點擊頁面上的某些區域時取消分頁,這通常會發生, 例如按鈕 )。

對我來說,它不能為iOS 6重新分配。這很好,因為iOS處理的觸摸有點不同。 頁面上的按鈕或您自己的手勢識別器在iOS 6下可以正常工作,因為它們具有優先級並會自動取消分頁。

我希望這有幫助。

您需要在代碼中添加以下內容

if (currentIndex == 0 || (index == NSNotFound)) {

    //if on the first page, can't go back
    return nil;

 }

最新版本的基於Xcode頁面的應用程序模板提供以下代碼:

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
{
    NSUInteger index = [self indexOfViewController:(DataViewController *)viewController];
    if ((index == 0) || (index == NSNotFound)) {
    return nil;
}

index--;
return [self viewControllerAtIndex:index storyboard:viewController.storyboard];
}

這應該夠了吧 :-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM