私はpopoverオブジェクトをcontentViewControllerに割り当てて、コンテンツビューコントローラにあるボタンにdismissコードを配置します。UIPopoverControllerデリゲートが呼び出されても呼び出されないようにする
[self.popover dismissPopoverAnimated:YES];
が呼び出され、ポップオーバーが却下されています。ボタンが押された
ただし、デリゲートのメソッドは自動的に呼び出されません。私はそれが代理人であるとは思っていませんでしたが、そこにあります。私はdismissPopoverAnimated行の後に次の行を追加すると、デリゲートは、それが「自動的に」デリゲートのメソッドを呼び出していない理由を私は理解していない
[self.popover.delegate popoverControllerDidDismissPopover:self.popover];
...正しく呼び出されます。 これはどうしてできますか?
私はあなたがプロトコルの代議員について話していると思いますか?それがどのように機能するのですか?デリゲートに対してプロトコルで定義されたメソッドを実行させたい場合は、[delegate protocolMethod]を使用してデリゲートに明示的に指示する必要があります。メソッドを実行したい場所に移動します。あなたのプロトコルに10のメソッドがあったとしたらどうでしょうか?このシナリオでは、デリゲートが10のすべてのメソッドを正しく実行する必要はありませんか?だから、ただ一つのメソッドしか定義されていなくても、呼び出すメソッドを推測することはできません。 – Zhang
通常、dismissPopoverAnimatedメソッドを使用すると、popoverが終了した後に自動的にpopoverControllerDidDismissPopoverメソッドが呼び出されます。それが、UIPopoverControllerが解雇について今私たちに教える方法です。 – frankish
可能な複製[UICopoverControllerを-dismissPopoverAnimatedで却下する:代理人を呼び出さない?](http://stackoverflow.com/questions/3567033/dismissing-uipopovercontroller-with-dismisspopoveranimated-wont-call-delegate) –