ストーリーボード付きのアプリがあります。セグエ付きのいくつかのビューコントローラーを使用して、選択したアイテムに応じてテーブルビューから選択します。ページがストーリーボードからの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 = [[Company100ViewController alloc] init]を実行する場合、これはストーリーボードまたはXIBに関連付けられているコントローラではありません。 XIBを使用してコントローラーをロードするには、以下を実行する必要があります。
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
Company100ViewController * vc = (Company100ViewController *)[sb instantiateViewControllerWithIdentifier:@"vc-identifier"];
ストーリーボードで、ビューコントローラのIDをvc-identifierに設定していることを確認してください。選択する識別子は何でも。
Swift
let sb = UIStoryboard(name: "MainStoryboard", bundle: nil)
let vc = sb.instantiateViewController(withIdentifier: "vc-identifier")
UIViewController
オブジェクトから初期化したい場合。
guard let vc = storyboard?.instantiateViewController(withIdentifier: "nameVC") else {
return
}
// add to current view
view.addSubview(vc.view)