7

UITableView には、セルに textField または textView が含まれていて、そのフィールドまたはビューが最初のレスポンダーになる場合、tableView 自体がスクロールして、セルがキーボードで隠れないようにする自動動作があるようです。ほとんどの場合、これは非常に便利だと思います。

私の場合は駄目です。tableView はより小さな containerView 内にあり、デフォルトの動作ではフィールドはまだ隠されています。コンテナ全体の移動を自分で処理したいのですが、デフォルトのスクロール動作が邪魔になっています。

UITableView のこの機能を「オフ」にする方法を知っている人はいますか?

4

2 に答える 2

1

私はこれとまったく同じ問題を抱えていました。小さなコンテナ ビューに UITableView があり、tableView で UITextField を選択すると、望ましくない位置に自動スクロールされました。これは UITableView のデフォルトの動作であり、これをオフにする方法はないようです。

代わりに、この subView コントローラーを UITableViewController ではなく UIViewController のサブクラスに変更しました。つまり、tableView を制御する TransportViewController.h の場合:

@interface TransportViewController : UITableViewController <UITextFieldDelegate>

なりました:

@interface TransportViewController : UIViewController <UITextFieldDelegate, UITableViewDataSource, UITableViewDelegate>

代わりにクラスを UIViewController クラスとして設定すると、テーブル セルの自動スクロールは発生しません。

UITableViewController をサブクラス化していないので、適切なテーブル ビューを指すように「tableView」プロパティを手動で設定する必要があります。これを IB に接続すると、次のようになります。

@property (strong, nonatomic) IBOutlet UITableView *tableView;

最後に、この新しく割り当てられた tableView プロパティをテーブルのデリゲートおよびデータ ソースに設定する必要もあります。次のように「viewDidLoad」メソッドでこれを行うことができます。

- (void)viewDidLoad
{
    [super viewDidLoad];

    _tableView.dataSource = self;
    _tableView.delegate = self;

}

これにより、UITextField が選択されたときに UITableViewController に固有の自動スクロールが停止します。その後、必要な UITableViewDataSource メソッドを実装し、独自の自動スクロール メソッドを処理するのはあなた次第です。

于 2013-10-09T04:41:08.730 に答える
-1

scrollViewDidScroll:メソッドを(UIScrollViewDelegateプロトコルから)実装することでこれを解決しました。UITableViewこのメソッドは、キーボードがスクロールを行うときに呼び出されます。

これが私がしたことです:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    [tableViewController.tableView setContentOffset:CGPointMake(0., 0.)];
}
于 2014-05-23T11:50:09.230 に答える