2

問題を説明する方法が完全にはわかりませんが、試してみます。

だから私はデリゲートとプロトコルの使い方を学ぼうとしていて、問題にぶつかりました。私はプロトコルを持っています:ButtonInPopOverWasPressed、1つのメソッドで:

   - (void)buttonWasPressed:(NSString *)buttonValue;

また、メインビューコントローラーと、次のプロパティを持つカスタムポップオーバークラスもあります。

   @property (retain, nonatomic) id <ButtonInPopoverWasPressed> delegate;

メインのViewControllerには、ボタンとテキストラベルがあります。ボタンが押されると、通常のポップオーバーになります。次に、segue.destinationViewControllerのデリゲートを次のようにメインビューコントローラーに割り当てます。

   [segue.destinationViewController setDelegate:self];    

次に、ポップオーバーのボタンを選択すると、メインビューがリッスンするプロトコルメソッドを呼び出すことにより、メインビューのテキストラベルに表示されます。

   [self.delegate buttonWasPressed:sender.currentTitle]; // sends the title of the button pressed to the delegate

これはすべて正常に機能します。私の問題は、情報をメインビューに戻すのではなく、ボタンが押されたときにポップオーバーを別のビューに移行させたいときに始まりました。しかし、私がポップオーバーとしてナビゲーションコントローラーを作成し、古いポップオーバーとの関係を設定すると、すべてが壊れました。

セグエのデリゲート(上に表示)を割り当てると、反対側にnullとして表示されるため、他のサブビューに渡して情報をメインビューに戻すことができなくなります。ナビゲーションコントローラーはデリゲートを吸い上げますか?デリゲートをNCから実際のビューに移動するにはどうすればよいですか?

私はこれがプロトコルとデリゲートの基本であることを知っていますが、私は周りを見回していて、私のために働いた答えを見つけることができないようです。

4

2 に答える 2

3

次のコードを試してください。

    NSArray *temp = [[segue destinationViewController] childViewControllers];
    PopoverViewController *popoverViewController = (PopoverViewController)[temp objectAtIndex:0];
    popoverViewController.delegate = self;
于 2012-06-28T18:07:51.977 に答える
0

ナビゲーションコントローラーを使用する代わりに、メインビューにデリゲートメソッドを作成して、別のポップオーバーを開き、既存のポップオーバーを閉じます。同じ結果が得られますが、ポップオーバーにナビゲーションコントローラーを配置するという疑わしいアイデアはありません。

于 2012-06-28T18:09:04.167 に答える