2013-03-04 14 views
22

私はストーリーボード付きのアプリを持っています。私は選択された項目に応じてテーブルビューから選択するためにいくつかのView Controllerを使用しています。私はページが、ストーリーボードからの1つ以上のビューコントローラであり、それらを繰り返してもページビューコントローラを持っていたいと思っています。私はこのようなページビューコントローラーinitしようとしています .... self.dataSource = self;ストーリーボードからView Controllerをプログラムでページビューコントローラーで使用する

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に関連付けられているコントローラではありません。 XIBでコントローラをロードするには、次の操作を行う必要があります:ストーリーボードで

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

あなたはVC-識別子へのView ControllerのIDを設定してください。あなたが選んだ識別子です。

+0

ありがとう。それは動作します。 –

+11

注:UIPageViewControllerがページUIViewControllerと同じストーリーボードにある場合は、UIStoryboard * sb = [UIStoryboard ...]の代わりにself.storyboardを使用するだけです –

3

スウィフト3

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

スウィフト

あなたは UIViewControllerオブジェクトからinitにしたい場合は

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

// add to current view 
view.addSubview(vc.view) 
関連する問題