0

いくつかのsが含まれているUITableViewセルがUITextFieldあります。ユーザーがtextFieldsの1つをクリックすると、ポップオーバーがいくつかの情報とともに表示されます。最初は、textFieldまたはpopoverの外側をクリックしてポップオーバーをクリアしてから、次のtextFieldをクリックする必要がありました。contentViewしたがって、セルをポップオーバーコントローラーのプロパティに追加して、passThroughViews最初にポップオーバーコントローラーを閉じなくても、セル内のさまざまなtextFieldを自由にクリックできるようにしました。ただし、元のポップオーバーを開いたままにして(これは問題ありません)、別の同じポップオーバーも開きます。

別のポップオーバーを開くコマンドを送信する前に、ポップオーバーがすでに開いているかどうかを確認する方法はありますか?これを検出する方法が思いつかないのですか?

4

2 に答える 2

2

各セルがポップオーバーのロジックを制御する場合は、カスタムセルにUIPopoverControllerDelegateプロトコルを実装するように指示し、ポップオーバーのデリゲートを(セル)として設定し、次のようにselfオーバーライドする必要があります。popoverControllerDidDismissPopover

- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController
{
    [self.pop dismissPopoverAnimated:YES]; // hide the popover
    self.pop = nil; // release the popover, this forces to create a fresh popover each time
}

必要に応じて、行を削除することもできますがself.pop = nil;、忘れずに解放してdeallocください(を使用しているため、ARCコードを使用していないと思いますretainCount)。bbumが示唆したように、オブジェクトの存在を確認するために使用するべきではありません。retainCount

さらに、各UIPopoverControllerインスタンスにはpopoverVisible、ポップオーバーがすでに表示されているかどうかを確認する場合に呼び出されるプロパティがあります。

于 2012-05-20T15:11:37.973 に答える
0

はい、やりました。この質問を見つけた他の人のために。他の答えに加えて、これは私がそれをした方法です。

ビューコントローラをaにしましたUIPopoverControllerDelegate

BOOL次に、と呼ばれるを作成しましたmyPopoverControllerOpen

ポップオーバーを作成したとき、BOOLをyesに設定しました。次に、デリゲートメソッドを使用して、戻るをにpopoverDidDismissPopover設定します。BOOLNO

BOOL次に、ポップオーバーを提示する前に、この状態を確認します。

于 2012-05-20T15:19:43.827 に答える