8

UINavigation バーを使用して iPad にポップオーバーを表示しています。2 番目のビューには、キーボードを表示できる UISearchController があります。キーボードはポップオーバーを上に押し上げますが、これは問題ありませんが、UINavigation バーの「戻る」ボタンを押すとキーボードが消えますが、ポップオーバーは元の位置にスライドしません。誰でもそれを修正する方法を知っていますか? ありがとう!

4

3 に答える 3

9

わかりましたので、私は実際にあなたの質問が何を求めているのかを理解しました(私は信じています). ハックジョブのように感じますが、他に方法を見つけることができませんでした。

キーボードを起動するコントローラーでは、キーボードが閉じるたびに通知を投稿しました。

    [aTextField resignFirstResponder];
[[NSNotificationCenter defaultCenter] postNotificationName:@"movePopups" object:nil];

次に、UIPopover を制御するホーム スクリーン コントローラーに戻り、リスナーを追加しました。

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

初期化の内部。適切なプログラミングの実践のために、dealloc でリスナーを削除することを忘れないでください。

[[NSNotificationCenter defaultCenter] removeObserver:self];

そのため、キーボードが消えるという通知を受け取るたびに、ポップオーバーが表示されるボタンへの参照を取得し、そこから直接再表示させます。

-(void)movePopUpToRightLocation {
NSLog(@"move pop up to right location");
if (morePopUp) {
    UIBarButtonItem *barButtonItem = (UIBarButtonItem *)[[bottomToolBar items] objectAtIndex:0];
    [morePopUp presentPopoverFromBarButtonItem:barButtonItem
                      permittedArrowDirections:UIPopoverArrowDirectionDown
                                      animated:YES];            
}   

}

どのポップアップかのチェックは追加していませんが、表示されるポップオーバー/ボタンのタイプが複数ある場合は簡単に実行できます。しかし、それはあなたが行くことができる基本的な前提です。

それが役に立てば幸い!

于 2010-09-15T21:24:52.927 に答える
1

イニシャライザのどこかに UIKeyboardDidHideNotification を登録することもできます。

[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movePopoverBack:) name:UIKeyboardDidHideNotification object:nil];

このコードは、ポップオーバーを元に戻します:

- (void)movePopoverBack:(id)sender {
    if ([self.settingsPopoverController isPopoverVisible]) {
        [self performSelector:@selector(hidePopover) withObject:nil afterDelay:0.1];
        [self performSelector:@selector(movePopoverBack) withObject:nil afterDelay:0.5];
    }
}

- (void)hidePopover {
    [self.settingsPopoverController dismissPopoverAnimated:YES];
}

- (void)movePopoverBack {
    [self.settingsPopoverController
     presentPopoverFromBarButtonItem:self.bottomToolbar.settingsButton
     permittedArrowDirections:UIPopoverArrowDirectionDown
     animated:YES];  
}   

遅延なしでは機能しませんでしたが、これは現在のプロジェクトでは受け入れられるようです。それが誰かを助けることを願っています。

于 2012-01-18T15:23:16.353 に答える
0

[戻る] ボタンを押した後、手動でresignFirstResponder検索フィールドを呼び出す必要があります (たとえば、 内viewDidDisappear)。

これは役に立ちますが、iOS 4 でデバイスが横向きで、左側に Ome ボタンがある場合、問題は再現されます。

于 2012-04-04T12:06:36.733 に答える