1

UIPopoverでiPad用アプリを作成しています。異なる情報を表示する 2 つのポップオーバーを呼び出すメイン ビューがあります。ストーリーボード ポップオーバー スレッドと別のスレッドを閉じる方法のガイドラインに従っていましたが、1 つを除いてすべて正常に動作します。私のポップオーバーには、親ビューでアクションをトリガーするボタンがあります。ボタンが 1 回だけクリックされ、ポップオーバーが 1 回だけ開かれた場合でも、アクションが複数回トリガーされることがあります。私の最初の仮定は、ポップオーバーがいくつかの呼び出しからいくつかのデータをキャッシュしていたということでしたが、問題はランダムに発生するようです.

私の構成は次のとおりです。Xcode 4.2、iOS 5.0 を搭載した Mac OSx Snow Leopard。シミュレーター、iPad 5.1 および iPad 6.0 でテストした結果はすべて同じです。

メインビューView 1とポップオーバービューView 2があります

私のビュー2には、ビュー1に通知を送信するProceedButtonClickedメソッドがあります

- (IBAction) ProceedButtonClicked{
    [[NSNotificationCenter defaultCenter] postNotificationName:@"proceedButtonClicked" object:self];
}

メソッドは、ポップオーバー ビューのボタンにバインドされます。view1 (親ビュー):

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

- (void) ButtonClicked:(NSNotification *) notification {
NSLog(@"I'm here ...");
//dismiss popover
if (paramPopover)
    [paramPopover dismissPopoverAnimated:YES];
}

私はiPadの開発にかなり慣れていないので、コードに明らかな何かが欠けている可能性がありますが、今まで検索しても何も見つかりませんでした。どんな助けでも大歓迎です。ありがとうございました。

4

1 に答える 1

0

通知を使用する場合、クラスの複数のインスタンスが同じ通知に応答するリスクがあるため、何らかの理由 (メモリー管理が悪い?) で 2 つのコントローラーが生きている場合、ボタンを押すと 2 つのコントローラーが呼び出しに応答し、重複が発生します。アクション。

ボタンには特定のコールバックを割り当てることができ、コードで設定するのは非常に簡単です:

ボタンが UIButton の場合、次のようにターゲット アクションを設定できます。

[button addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside];

ボタンが UIBarButtonItem の場合、作成時にターゲットを設定します

[[UIBarButtonItem alloc] initWithTitle:@"Title" style:UIBarButtonItemStyleBordered target:self action:@selector(buttonAction:)];

編集:

NSLog(@"I'm here ..."); それは不気味です...

于 2012-11-26T19:52:33.873 に答える