0

私の質問は、他の人の質問へのフォローアップです。@ritch が彼の質問で提供する画像では、次のビュー コントローラーがあります。

"View Controller" -> (Container View)"View Controller" ->["First Controller", "Second Controller"]

私の質問については、次のように書き直します。

"Parent Controller" -> (Container View)"Child Controller" ->["First Controller", "Second Controller"]

だから私はメソッドを実装しようとしています

- (IBAction)SegmentedControlValueChange:(UISegmentedControl *)sender
{
}

論理的には、このメソッドは「親コントローラー」にあるはずだと思いましたが、参考までに、「子コントローラー」にはdisplayContentController

FirstController *firstController = [self.storyboard instantiateViewControllerWithIdentifier:@"yourIdentifier"];

誰かが私のために明確にしてください:SegmentedControlValueChangeとinstantiateViewControllerWithIdentifierの間:

  • 「Parent Controller」の h および m ファイルにはどのようなコードが入りますか?
  • 「Parent Controller」の h および m ファイルにはどのようなコードが入りますか?
4

1 に答える 1

0

最後に、ビューにセグエがないため、ストーリーボード識別子の使用は少し「醜い」で間違っていると感じたため、質問で述べたことに対して別のアプローチを取りました。

だからここに私がしたことがあります:

コンテナー ビューに表示されるビュー コントローラー用の 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]];
}

お役に立てれば。

于 2014-07-24T09:06:37.733 に答える