11

グループ化された静的UITableViewを持つUITableViewControllerがあります。ストーリーボード上の静的テーブルビューのセルを定義しています。セルの1つにテキストフィールドがあります。このテキストフィールドが呼び出されると、キーボードがポップアップしますが、テーブルビューは、テーブルビューコントローラで通常行われるように自動的にサイズ変更されません。そのため、キーボードがテキストフィールドを部分的に覆っており、上にスクロールできません。

私の理解では、UITableViewControllerとテーブルビューを使用している場合、キーボードが呼び出されたときに表示可能領域が自動的に縮小されます。この静的なテーブルビューではなく、アプリの他の部分で意図したとおりに機能します。静的テーブルでは機能しませんか?他に足りないものはありますか?これを解決する簡単な方法はありますか?

ありがとう

4

3 に答える 3

55

答え

静的セルとは何の関係もありません。彼らは働くはずです。

コントローラがすでにUITableViewControllerである場合は、メソッドを使用したかどうかを確認してくださいviewWillAppear。そうした場合は、[super viewWillAppear:YES]「自動動作」を機能させるために呼び出す必要があります。

-(void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:YES]; // This line is needed for the 'auto slide up'
   // Do other stuff
}

この問題は、コントローラーのボイラープレートコードにメソッド呼び出しが付属しておらず、コントローラーviewWillAppearで定義した場合はオーバーライドするため、簡単に発生します。

追加情報

このリンクを見てください。

AppleTableViewプログラミングガイド

注:UITableViewControllerには、iOS3.0の新機能があります。テーブルビューコントローラーは、テーブルビュー行のインライン編集をサポートします。たとえば、行に編集モードでテキストフィールドが埋め込まれている場合、編集中の行が表示されている仮想キーボードの上にスクロールします。

重要なビット

UITableViewControllerクラスは、loadView、viewWillAppear:、およびUIViewControllerから継承されたその他のメソッドをオーバーライドすることにより、前述の動作を実装します。UITableViewControllerのサブクラスでは、これらのメソッドをオーバーライドして、特殊な動作を取得することもできます。これらのメソッドをオーバーライドする場合は、デフォルトの動作を取得するために、通常は最初のメソッド呼び出しとして、必ずメソッドのスーパークラス実装を呼び出してください。

于 2012-07-08T05:48:35.563 に答える
2

Swiftの場合

override func viewWillAppear(animated: Bool) {

   super.viewWillAppear(animated)

}
于 2014-10-21T14:59:40.960 に答える
0

テーブルフォームの1つが編集用に選択されている場合、ビューを上に押し上げます(キーボード通知の実装が必要です)

- (void) keyboardDidShow:(NSNotification *)aNotification
{
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.25];
    self.view.center = CGPointMake(self.view.center.x, self.view.center.y-moveAmount);
    [UIView commitAnimations];
    isRaised = [NSNumber numberWithBool:YES];
}

テーブルのサイズを変更します(高さを2で割ります)。これをキーボードに交換して、メソッドを表示しました。また、キーボードの非表示メソッドを使用して、この作業を元に戻すことができます。

CGRect temp = CGRectMake(mineTable.frame.origin.x, mineTable.frame.origin.y, mineTable.frame.size.width, mineTable.frame.size.height/2);
mineTable.frame = temp;
于 2012-07-03T15:27:11.903 に答える