1

私はUITableView静的なカスタムを持ってUITableViewCellいます。現在、リターンキーが押されて次のレスポンダーが設定された後、テキストフィールドがキーボードの後ろに隠れているため、テキストフィールドをスクロールして表示する必要があります。を使用する必要があることはわかっていますscrollToRowAtIndexPath:atScrollPosition:animated:。テキスト ボックスの 1 つにスクロールするにはどうすればよいですか。

これはそれ自体をスクロールする必要があることはわかっていますが、UIViewController派生元がUITableViewController(Apple がそうあるべきだと述べているように) 場合、UITableViewControllerクラスは などを実装してこの動作を処理UITextFieldDelegateUIScrollViewDelegateますUIViewController。ビューコントローラーのUIView. したがって、基本的に、UITableViewController(他の理由で) から派生することを選択したため、 の機能がありませんUIViewControler

4

3 に答える 3

1

私はいつもこれをしています。私がそれを行う方法は、テキストフィールドの UIControlEventEditingDidBegin で呼び出されるメソッドがあり、そのメソッドで次のことを行います。

-(void)startEdit:(UITextField *)textField {
    self.prevOffset = self.tableView.contentOffset.y; //I like storing the current offset so I can restore it when the text stops editing, you don't have to do this.
    int offSet = [textField superview].frame.origin.y; //this gets the y coordinate of the cell the textField is in. If the table is not at 0,0, you also need to add [[textField superview] superview].frame.origin.y;
    offSet-=(self.view.frame.size.height-KEYBOARD_HEIGHT)/2; //where KEYBOARD_HEIGHT is 216 in portrait and 160 in landscape;
    if (offSet<0) offSet = 0;
    [UIView animateWithDuration:0.3 animations:^{
        [self.tableView setContentOffset:CGPointMake(0,offSet)];}];
}

他にも多くのことを行っていますが、それらは私のアプリケーションに固有のものだと思います。

最初に、オフセットが 0 より大きい場合、contentInset を UIEdgeInsetsMake(0,0,KEYBOARD_HEIGHT,0) に設定しました。

また、元のオフセット (self.prevOffset) にフレームの高さを加えた値がコンテンツ サイズより大きい場合 (オフセットの設定が低すぎてジャンプして戻るため、ジャンプも発生します)、prevOffset を MAX(0,contentSize.高さ-frame.size.height)。

これらは必須ではありませんが、飛び回っている Scroll/TableView を取得しています。試してみてください。

于 2013-03-19T21:57:30.180 に答える
0

UITableViewControllerには、すでにヘッダーフィールドにデリゲートプロトコルがあります。クラスはUITableViewControllerではなくなったため、UITableViewのデリゲートプロトコルヘッダーを.hファイルに手動で追加する必要があります。

UITableViewを持つカスタムビューコントローラーを作成するときは、デリゲートメソッドを取得するためにUITableViewControllerから始めますが、その後、UITableViewControllerをUIViewControllerに変更し、手動でデリゲートプロトコルをヘッダーに追加します。

必要に応じて、UITableViewController.hを確認し、デリゲートプロトコルをコピーできます。

参考までに、それらは次のとおりです。

<UITableViewDelegate, UITableViewDataSource>

したがって、.hファイルは次のようになります。

@interface MyTableViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>

selfまた、コントローラーのデリゲートをInterfaceBuilderまたはコードでファイルの所有者に設定することを忘れないでください。

于 2013-03-19T22:08:21.170 に答える
0

また、無料で入手できる Sensible TableView フレームワークなどのフレームワークを使用する方がはるかに簡単であることに気付くかもしれません。これらのフレームワークは通常、すぐに使用できるすべてのデータ入力セルを提供し、ユーザーに代わってすべてのスクロール/サイズ変更作業を処理します。

于 2013-03-19T22:48:10.220 に答える