最後に、ビューにセグエがないため、ストーリーボード識別子の使用は少し「醜い」で間違っていると感じたため、質問で述べたことに対して別のアプローチを取りました。
だからここに私がしたことがあります:
コンテナー ビューに表示されるビュー コントローラー用の XIB ファイルを使用してクラスを作成することから始めました。(例: FirstController、SecondController など)
次に、これをViewControllerのViewDidLoadメソッドに入れます(親View Controller - セグメント化されたコントロールを持つもの)
- (void)viewDidLoad
{
[super viewDidLoad];
// First Controller
self.firstViewController = [[FirstViewController alloc] init];
// Second Controller
self.secondViewController = [[SecondViewController alloc] init];
// Add the controllers to an Array
self.controllers = @[self.firstViewController, self.secondViewController];
// Set the container to show the first view controller on load
[self displayContentController:[self.controllers firstObject]];
}
次に、コンテナー ビューのビューの表示と非表示を処理する 3 つのメソッドを設定します。
- (void)displayContentController:(UIViewController *)content
{
[self addChildViewController:content];
content.view.frame = [self frameForContentController];
[self.view addSubview:content.view];
[content didMoveToParentViewController:self];
// Set current controller
self.currentController = content;
}
- (void)hideContentController: (UIViewController*)content
{
[content willMoveToParentViewController:nil];
[content.view removeFromSuperview];
[content removeFromParentViewController];
}
- (CGRect)frameForContentController
{
return self.contentController.frame;
}
最後に、別のセグメント化されたコントロール値が選択されたときにイベントを処理しました。
- (IBAction)segmentedControlValueChanged:(UISegmentedControl *)sender
{
// Hide current view controller
[self hideContentController:self.currentController];
// Show new selected view controller
[self displayContentController:[self.controllers objectAtIndex:sender.selectedSegmentIndex]];
}
お役に立てれば。