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。在左栏底部列出了一个示例项目,您可能会发现它很有用。