UINavigation バーを使用して iPad にポップオーバーを表示しています。2 番目のビューには、キーボードを表示できる UISearchController があります。キーボードはポップオーバーを上に押し上げますが、これは問題ありませんが、UINavigation バーの「戻る」ボタンを押すとキーボードが消えますが、ポップオーバーは元の位置にスライドしません。誰でもそれを修正する方法を知っていますか? ありがとう!
3 に答える
わかりましたので、私は実際にあなたの質問が何を求めているのかを理解しました(私は信じています). ハックジョブのように感じますが、他に方法を見つけることができませんでした。
キーボードを起動するコントローラーでは、キーボードが閉じるたびに通知を投稿しました。
[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];
}
}
どのポップアップかのチェックは追加していませんが、表示されるポップオーバー/ボタンのタイプが複数ある場合は簡単に実行できます。しかし、それはあなたが行くことができる基本的な前提です。
それが役に立てば幸い!
イニシャライザのどこかに 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];
}
遅延なしでは機能しませんでしたが、これは現在のプロジェクトでは受け入れられるようです。それが誰かを助けることを願っています。
[戻る] ボタンを押した後、手動でresignFirstResponder
検索フィールドを呼び出す必要があります (たとえば、 内viewDidDisappear
)。
これは役に立ちますが、iOS 4 でデバイスが横向きで、左側に Ome ボタンがある場合、問題は再現されます。