1

いくつかの静的セル (UITextFields で満たされた) を持つ UITableViewController があります。ここで、アクティブな UITextField を画面の中央に保持したいと思います (1 つのセル/UITextfield を上下に動かしても)。

どうすればこれを達成できますか?

4

2 に答える 2

0

過去に何度かやりましたが、あまり好きではありませんでした。私の解決策は、選択したセルが表示されたままになるように、テーブルを上にしてビューを移動することでした。

最初に、キーボードがいつ表示または非表示になったかを知るために、いくつかのオブザーバーを追加しました

[[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];

}

基本的には、キーボードの高さを読み取って、テーブルの中央に追加して上に押し上げ、キーボードが消えたら同じ高さを削除しました。

今、キャッチがあります!非常に具体的だったのでコードから削除しましたが、キーボードがセルを覆う場合にのみテーブルを移動するように注意する必要があります! そうしないと、表示されているセルが画面の上部に押し出されてしまいます。これは、ビューの設定、境界線、テーブルのサイズなどに大きく依存するため、この部分についてはお手伝いできませんが、基本的な考え方は理解できたと思います!

幸運を

于 2012-10-04T14:45:04.413 に答える