2013-03-04 54 views
22

我有一個故事板應用程序。我使用幾個View控制器與segues來根據選擇的項目從表視圖中進行選擇。我想要一個頁面視圖控制器,其中頁面將成爲故事板中的一個或多個視圖控制器,甚至可以重複它們。我試圖init這樣的頁面視圖控制器: .... self.dataSource = self;在頁面視圖控制器中以編程方式使用視圖控制器

UIViewController *initialViewController =[self viewControllerAtIndex:current]; 
NSArray *viewControllers = [NSArray arrayWithObject:initialViewController]; 


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

- (UIViewController *)viewControllerAtIndex:(NSUInteger)index 
{ 
if ((descriptions.count == 0) || 
    (index >= descriptions.count)) { 
    return nil; 
} 

current=index; 

// Create a new view controller and pass suitable data. 
NSString *language = [[NSLocale preferredLanguages] objectAtIndex:0]; 

Description *description=[DBCompany getDescriptionById:language descriptionId:[[descriptions objectAtIndex:index] integerValue]]; 

UIViewController *viewController=nil; 
if(description.frame==100){ 
    viewController=[[Company100ViewController alloc] init]; 
    ((Company100ViewController*)viewController).companyId = companyId; 
} 
return viewController; 
} 

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController 
{ 
if ((descriptions.count == 0) || 
    (current-1 < 0)) { 
    return nil; 
} 

return [self viewControllerAtIndex:current-1]; 
} 

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController 
{ 
if ((descriptions.count == 0) || 
    (current >= descriptions.count)) { 
    return nil; 
} 

return [self viewControllerAtIndex:current+1]; 
} 

viewcontroller顯示爲黑色。我認爲是因爲我添加了UIviewcontroller類,但沒有將它連接到任何視圖XIB,就我而言,這是故事板。

如何以編程方式使用故事板中的不同視圖控制器在頁面視圖控制器中使用?

回答

53

如果你做viewController = [[Company100ViewController alloc] init],那麼是的,這不是一個與故事板或XIB關聯的控制器。爲了與廈門國際銀行加載控制器,你必須做到以下幾點:

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
Company100ViewController * vc = (Company100ViewController *)[sb instantiateViewControllerWithIdentifier:@"vc-identifier"]; 

在故事板確保你設置視圖控制器的id設置爲VC-標識符;無論您選擇何種標識符

+0

謝謝。這樣可行。 – 2013-03-06 18:30:16

+11

注意:如果你的UIPageViewController與頁面UIViewControllers在同一個故事板上,你可以簡單地使用self.storyboard而不是UIStoryboard * sb = [UIStoryboard ... – 2013-03-15 16:05:35

3

斯威夫特3

let sb = UIStoryboard(name: "MainStoryboard", bundle: nil) 
let vc = sb.instantiateViewController(withIdentifier: "vc-identifier") 
0

斯威夫特

如果你想從UIViewController對象初始化。

guard let vc = storyboard?.instantiateViewController(withIdentifier: "nameVC") else { 
    return 
} 

// add to current view 
view.addSubview(vc.view) 
相關問題