0

私はポップオーバーについて多くのことを学んでおり、デリゲートを使用してポップオーバーを優雅に閉じる方法を見つけました。私が今抱えている問題は、私のプログラムに.で制御されるポップアップがあることですUINavigationController.

ユーザーが myparent のボタンを押すとViewController、ポップオーバーが表示され、ユーザーはテーブルを使用して 3 つのシーンをナビゲートできます。ポップオーバーを閉じる時が来るまで、すべてが正常に機能します。

最後のシーンでは、ユーザーがインデックスを押すたびにポップオーバーを閉じたいと思います。これらのビューにアタッチされていなければ、UINavigationController簡単です。デリゲートの実装方法がわかりません。

実装でデリゲートを作成しようとしましたUINavigationControllerが、XCode はUINavigationController既にデリゲートがあることを示しています。既に存在するデリゲートを使用する方法はありますか?

どんな助けでも大歓迎です。

4

2 に答える 2

1

この場合、通知を使用する方が良いと思います。これは、解任を開始するコントローラーが、解任を行うべきポップオーバー コントローラーから遠く離れているためです (そのため、デリゲートを設定するのは難しいでしょう)。ストーリーボードでポップオーバー セグエを使用している場合、セグエ オブジェクトからポップオーバー コントローラーへの参照を取得できます。ポップオーバー セグエを開始するコントローラーから、次のコードを挿入します。

@implementation ViewController {
    UIPopoverController *pop;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dismissPopover) name:@"DismissPopoverNotification" object:nil];
}

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    pop = [(UIStoryboardPopoverSegue *)segue popoverController];
}

-(void)dismissPopover {
    [pop dismissPopoverAnimated:YES];
}

そして、テーブル内の行を選択するとポップオーバーが閉じられる最後のコントローラーでは、didSelectRowAtIndexPath メソッドに次のコードを含めることができます。

[[NSNotificationCenter defaultCenter] postNotificationName:@"DismissPopoverNotification" object:self];
于 2013-01-26T01:11:20.213 に答える
0

データをやり取りするために通知をかなり使用します。この追加の行、私は知らなかった...

pop = [(UIStoryboardPopoverSegue *)segue popoverController];

それでも、見逃していた小さな詳細を1つ指摘したいと思います...

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dismissPopover:) name:@"DismissPopoverNotification" object:nil];

disconnectPopover の後にコロンが必要です... 上記を参照してください。それがないと、コンパイラがクラッシュしていました。

それ以外は… ありがとうと言いたいです!ある解雇の問題に役立ちました。別の問題で試してみるつもりです。

于 2013-01-28T13:40:47.280 に答える