1

私は Xcode 4.5 を使用しており、iOS6 をターゲットにしています。プリアンブル: 検索を含むポップオーバーを含む libraryView (View Controller を表示) があります。検索結果が表示された後、行をタップすると、ライブラリが閉じられ、entryView に移動します。それはすべてうまくいきます。私の問題: entryView を閉じて libraryView に戻ると、検索ポップオーバーがまだ表示されます。これを改善するためにさまざまな方法を試しました。検索ポップオーバーのセグエに通知オブザーバーを追加し、検索コントローラーから通知を投稿し、entryView から libraryView にある次のメソッドに投稿しました。そして、はい、libraryView にはこのメソッド用の addObserver があります。

- (void)searchComplete:(NSNotification *)notification
{
   NSLog(@"SearchPopover dismiss notification?");
   [_searchPopover dismissPopoverAnimated:YES];
}

テストで追加しました...

if (_searchPopover.popoverVisible)
{
   [_searchPopover dismissPopoverAnimated:YES];
}

DidLoad、viewWillAppear、viewWillDisappear、awakeFromNib を表示するには、ライブラリ内のすべてを使用します。プロパティとして searchPopover があり、ivar として試しました。私が試したものは、セグエの前またはリターンの後にポップオーバーを却下するものはありません。

誰にもアイデアはありますか?助けていただければ幸いです!!!

4

1 に答える 1

2

私はこの問題の解決策を見つけました...この答えでそれを見つけました: iOSUINavigationControllerにあるポップオーバーを却下します

ただし、回答のタイプミスを修正し、「dismissPopover」メソッドをNSNotificationメソッドに変更するための小さな追加手順がありました。ポップオーバーのセグエを追加しましたが、通常は必要ありません。ただし、重要なのは、親のポップオーバーの定義をUIStoryboardPopoverSegueに設定することです。

次に、通知を使用して、親が却下する必要があることを通知します。

親ビューから:

- (void)viewDidLoad
{
    ... other loading code...

    [NSNotificationCenter.defaultCenter addObserver:self selector:@selector(dismissSearch:) name:@"dismissSearch" object:nil];
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"SearchSegue"])
    {
        [segue.destinationViewController setDelegate:self];
        _searchPopover = [(UIStoryboardPopoverSegue *)segue popoverController];
    }
}

- (void)dismissSearch:(NSNotification *)notification
{
    NSLog(@"SearchPopover dismiss notification?");
    [_searchPopover dismissPopoverAnimated:YES];
}

子ビュー(SearchView)。理想的には、didSelectRowAtIndexPathにあります。私はそれが検索されたアイテムを表示するビューへのセグエでも機能することを発見しました。それは私が通常addObserverを配置する場所です。この場合、それはpostNotificationです...

    [NSNotificationCenter.defaultCenter postNotificationName:@"dismissSearch" object:nil];

最後の注意:ボタンをタップしたときにポップオーバーの可視性をチェックするIBActionを使用していました...表示または非表示にします。これと他の方法があると、ボタンをタップするとすぐにポップオーバーが閉じてしまうことがわかりました!可視性のif/elseチェックをコメントアウトすると、それが解決しました。

この道に私を導いてくれたrdelmarに感謝します!

于 2013-01-28T15:07:57.477 に答える