2

アプリケーションの一部のビューにカスタムヘッダーとして追加しようとしているボタンが3つあります。それらをストーリーボードに追加すると問題なく機能し、ViewControllerのメソッドに接続できます。

最近、これらのボタンを他のページに追加して、別のページで再利用できるコントロールに抽象化したいと思いました。セットアップはしましたが、通常の方法で追加できません。

多分この写真は私が話していることを説明するのに役立つでしょう

通常、ビューコントローラーを子ビューコントローラーとして追加してから、ビューをサブビューとして追加します。この場合、ストーリーボードにあるプレースホルダーにビューを追加します。コードは次のようになります。

// Setup Header
HeaderViewController * headerViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"HeaderViewController"];
[headerViewController.view setFrame:CGRectMake(0.0f, 0.0f, [headerViewController.view frame].size.width, [headerViewController.view frame].size.width)];
[_headerView addSubview:headerViewController.view];

これにより、ビューを正しく表示できますが、ボタンをクリックすると、ボタンのクリックに関連付けられたIBActionsを持つView Controllerが見つからないため、クラッシュします。通常、私は次のコードを追加し、それが処理されます。

[self addChildViewController:headerViewController];

ただし、この場合、次のようなエラーが発生します。

キャッチされない例外のためにアプリを終了します'UIViewControllerHierarchyInconsistency'、理由:'子ビューコントローラー:親ビューコントローラーが必要です:しかし実際の親は:'

これは、カスタムヘッダービューコントローラーの親がナビゲーションコントローラーである必要があると考えていることを意味すると理解しています。ナビゲーションコントローラーの子として設定することもできません。表示されているPageViewControllersビューの上にヘッダービューを追加します。私はおそらく単純なものが欠けています

私が試した組み合わせのいくつかはシミュレーターで機能しますが、どれもデバイスでは機能しません。したがって、同様の構成で遊んでいる場合は、シミュレーターで機能しているように見える場合は、デバイスでそれを確認してください。

何か考えや他の情報を提供して役立つ情報はありますか?

4

2 に答える 2

2

代わりに、IBActionをヘッダーView Controllerに配置し、他のViewControllerを参照せずにそれらをxibにバインドします。

次に、ヘッダービューコントローラーで、それらをその親に渡すことができます。そうすることで、xibの一部としてではなく、実行時に誰がアクションを受け取るかを決定します。

- (IBAction)button1Pressed {
    if ([self.parentViewController respondsToSelector:@selector(button1Pressed)])
        [self.parentViewController performSelector(button1Pressed)];
    else
        NSLog(@"Parent doesn't care about button 1 : %@", self.parentViewController);
}

親が応答できるかどうかを確認することもできます:)

于 2012-11-28T15:41:20.173 に答える
0

私は提案された他の方法を使用してこれを機能させることができませんでした、それらが間違っているというわけではありません、私はそれらを機能させることができませんでした。

最終的に、対応するxibを使用してUIViewサブクラスを作成し、IBActionsをUIViewサブクラスに配置しました。これには、トリガーされたIBActionに対してモーダルビューを適切に表示するために、保持ビューコントローラーへの弱いリンクが必要でした。

于 2012-11-29T16:45:44.983 に答える