いくつかの静的セル (UITextFields で満たされた) を持つ UITableViewController があります。ここで、アクティブな UITextField を画面の中央に保持したいと思います (1 つのセル/UITextfield を上下に動かしても)。
どうすればこれを達成できますか?
過去に何度かやりましたが、あまり好きではありませんでした。私の解決策は、選択したセルが表示されたままになるように、テーブルを上にしてビューを移動することでした。
最初に、キーボードがいつ表示または非表示になったかを知るために、いくつかのオブザーバーを追加しました
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShowNotification:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHideNotification:) name:UIKeyboardWillHideNotification object:nil];
次に、テーブルを押し上げるために、次のようなことを行いました。
- (void)keyboardWillShowNotification:(NSNotification*)notification {
CGSize kbSize = [[notification.userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
double animationDuration = [[[notification userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];
CGPoint newCenter = self.myable.center;
NSLog(@"Height: %f Width: %f", kbSize.height, kbSize.width);
// Portrait: Height: 264.000000 Width: 768.000000
// Landscape: Height: 1024.000000 Width: 352.000000
if([[UIApplication sharedApplication] statusBarOrientation] < 3) {
newCenter = CGPointMake(newCenter.x, heightP - kbSize.height - self.myTable.frame.size.height/2);
}
else {
newCenter = CGPointMake(newCenter.x, heightL - kbSize.width - self.myTable.frame.size.height/2);
}
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:animationDuration];
self.myTable.center = newCenter;
[UIView commitAnimations];
}
- (void)keyboardWillHideNotification:(NSNotification*)notification {
NSLog(@"keyboard disappeared");
double animationDuration = [[[notification userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];
CGPoint newCenter = self.myTable.center;
if([[UIApplication sharedApplication] statusBarOrientation] < 3) {
newCenter = CGPointMake(newCenter.x, 0 + self.lmyTable.frame.size.height/2);
}
else {
newCenter = CGPointMake(newCenter.x, 0 + self.myTable.frame.size.height/2);
}
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:animationDuration];
self.myTable.center = newCenter;
[UIView commitAnimations];
}
基本的には、キーボードの高さを読み取って、テーブルの中央に追加して上に押し上げ、キーボードが消えたら同じ高さを削除しました。
今、キャッチがあります!非常に具体的だったのでコードから削除しましたが、キーボードがセルを覆う場合にのみテーブルを移動するように注意する必要があります! そうしないと、表示されているセルが画面の上部に押し出されてしまいます。これは、ビューの設定、境界線、テーブルのサイズなどに大きく依存するため、この部分についてはお手伝いできませんが、基本的な考え方は理解できたと思います!
幸運を