23

ストーリーボード付きのアプリがあります。選択したアイテムに応じてテーブルビューから選択するために、セグエを備えたいくつかのViewControllerを使用しています。ページがストーリーボードから1つ以上のビューコントローラーになり、それらを繰り返しても、ページビューコントローラーが必要です。私は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)にも接続していないためだと思います。

ストーリーボードとは異なるViewControllerをプログラムで使用して、Page View Controllerで使用するにはどうすればよいですか?

4

3 に答える 3

58

viewController = [[Company100ViewController alloc] init]を実行すると、はい、これはストーリーボードまたはXIBに関連付けられているコントローラーではありません。コントローラにXIBをロードするには、次の手順を実行する必要があります。

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

ストーリーボードで、ViewControllerのIDがvc-identifierに設定されていることを確認してください。選択した識別子。

于 2013-03-05T01:56:28.860 に答える
7

スウィフト3

let sb = UIStoryboard(name: "MainStoryboard", bundle: nil)
let vc = sb.instantiateViewController(withIdentifier: "vc-identifier")
于 2017-08-07T14:18:03.473 に答える
1

迅速

オブジェクトから初期化するUIViewController場合。

guard let vc = storyboard?.instantiateViewController(withIdentifier: "nameVC") else {
  return
}
    
// add to current view
view.addSubview(vc.view)
于 2017-09-22T08:56:53.557 に答える