2

我正在開發一個應用程序,我正在使用iOS5故事板。基本上我有一個UITabBarController作爲根控制器,它包含一些UIViewController和一個UISplitViewController。我想要做的就是使用UIPageViewController作爲UISplitViewController的DetailController。問題是UIPageViewController不顯示它的視圖控制器,但它顯示一個黑屏。我要做的就是在DetailController的viewDidLoad方法來初始化兩個內容視圖控制器,並指令它們分配:iOS5故事板UIPageViewController

[self setViewControllers:self.pagesViewControllerArray direction:UIPageViewControllerNavigationOrientationHorizontal animated:NO completion:nil];

讓我想不通的地方是錯誤的。

viewDidLoad方法如下:

- (void)viewDidLoad{ 

    self.dataSource = self; 
    self.delegate = self; 

    self.page1ViewController = [[Page1ViewController alloc] initWithNibName:@"Page1ViewController" bundle:nil]; 
    self.page2ViewController = [[Page2ViewController alloc] init]; 

    self.pagesViewControllerArray = [NSArray arrayWithObjects:self.page1ViewController, self.page2ViewController, nil]; 

    [self setViewControllers:self.pagesViewControllerArray direction:UIPageViewControllerNavigationOrientationHorizontal animated:NO completion:nil]; 

} 

我試圖同時使用與其相關聯的筆尖的ViewController和與其視圖的ViewController動態加載,但它不工作。

任何幫助將非常感激。 謝謝

回答

0

首先確保viewDidLoad被調用。有很多方法可以初始化一個實例,我不確定何時使用每個選項。如果使用initWithNibName,那麼viewDidLoad將不會被調用,如果我沒有記錯的話。爲確保調用該方法,您可以添加NSLog語句,如...

NSLog(@"viewDidLoad: %@", NSStringFromClass([self class])); 

這將在調試器控制檯中顯示它是否被調用。你也可以添加initWithNibName方法來查看是否被調用。

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     NSLog(@"initWithNibName: %@", NSStringFromClass([self class])); 
    } 
    return self; 
} 

我發現故事板不能按我的預期工作。我開始使用的是容器視圖。他們沒有什麼特別的。它們只是可以放置在視圖中的可視元素,然後是標準UIViewController的包裝,然後設計界面顯示與放置在另一個視圖中的容器視圖具有相同尺寸的相關視圖。然後你可以管理那裏的細節。如果你確實需要處理父視圖控制器的任何初始化,你將使用prepareForSegue方法。您將需要爲容器視圖設置embed segue的名稱(不像您通常看到的那樣是push segue),當它觸發時,您可以訪問destinationViewController,它只是容器視圖中的嵌入式視圖控制器。解決它可能需要一些修補。

在Organizer的Documentation選項卡中查找UIPageViewController。在左欄底部列出了一個示例項目,您可能會發現它很有用。