2015-03-03 51 views
0

我的主控制器有一個UIPageViewController。我想滑過不同結構的視圖,所以我不能使用相同的控制器。另外,我不想污染主要的故事板。我想用自定義控制器來使用不同的XIB文件。到現在爲止還挺好。IOS - 如何用不同的XIB文件創建具有多個ViewController的UIPageViewController

我想能夠提供索引到UIPageViewController。

This答案顯示瞭如何使用多個視圖控制器完成它,但它們都在故事板內。

我試過同樣的方法。我用相應的ViewController創建了我的XIB。爲了向PageViewController提供索引,我嘗試將RestorationId設置爲該視圖以稍後在代碼中訪問。 在PageViewController,我建立控制器是這樣的:

func viewControllerAtIndex(index: Int) -> UIViewController { 
    let vc = UIViewController(nibName: controllersNames[index], bundle: nil) 
    ... 
} 

但如果我這樣做

vc.restorationIdentifier 

我得到零..

所以,我似乎無法找到一種方法,將控制器綁定到我需要提供UIPageViewController的索引。

請幫忙。

回答

2

您需要像創建主視圖控制器一樣創建,並在此視圖控制器中初始化所有您需要的VC。

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
     // initialize controllers 
     self.controllers = [[NSMutableArray alloc] 
          initWithObjects: 
          [[Document1ViewController alloc] initWithNibName:@"Document1ViewController" bundle:nil], 
          [[Document2ViewController alloc] initWithNibName:@"Document2ViewController" bundle:nil], 
          [[Document3ViewController alloc] initWithNibName:@"Document3ViewController" bundle:nil], 
          nil]; 
    } 
    return self; 
} 

然後,你需要創建一個與你想要的VC數量分頁的滾動視圖。

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 

    for (NSUInteger i =0; i < [self.controllers count]; i++) { 
     [self loadScrollViewWithPage:i]; 
    } 

    self.pageControl.currentPage = 0; 
    _page = 0; 
    [self.pageControl setNumberOfPages:[self.controllers count]]; 

    UIViewController *viewController = [self.controllers objectAtIndex:self.pageControl.currentPage]; 
    if (viewController.view.superview != nil) { 
     [viewController viewWillAppear:animated]; 
    } 

    self.scrollView.contentSize = CGSizeMake(scrollView.frame.size.width * [self.controllers count], scrollView.frame.size.height); 
} 

滾動時,你需要更改滾動視圖的VC訂單,可能是因爲你有所有VC的引用一個數組。

你可以看到一個例子here

相關問題