阻止UITableView滚动到包含textField的单元格

Jam*_*ite 7 objective-c

UITableView似乎有一些自动行为,如果单元格包含textField或textView,并且该字段或视图成为第一响应者,则tableView会自动滚动,以便键盘不会遮挡单元格.我敢肯定,在大多数情况下,这非常方便.

在我的情况下,这是不好的.tableView位于较小的containerView中,默认行为使字段仍然模糊不清.我想处理自己移动整个容器,默认的滚动行为正在阻碍.

有谁知道我怎么能"关闭"UITableView的这个功能?

Tys*_*Tys 1

我遇到了完全相同的问题,我在较小的容器视图中有一个 UITableView,当我在 tableView 中选择 UITextField 时,它会自动滚动到不需要的位置。这是 UITableView 的默认行为,似乎没有任何方法可以将其关闭。

相反,我将此子视图控制器更改为 UIViewController 的子类,而不是 UITableViewController。即我的 TransportViewController.h 控制 tableView:

@interface TransportViewController : UITableViewController <UITextFieldDelegate>
Run Code Online (Sandbox Code Playgroud)

变成:

@interface TransportViewController : UIViewController <UITextFieldDelegate, UITableViewDataSource, UITableViewDelegate>
Run Code Online (Sandbox Code Playgroud)

通过将该类设置为 UIViewController 类,表格单元格的自动滚动将不会发生。

现在您没有子类化 UITableViewController,您现在必须手动设置“tableView”属性以指向适当的表视图。你可以在 IB 中连接它,这会给你类似的东西:

@property (strong, nonatomic) IBOutlet UITableView *tableView;
Run Code Online (Sandbox Code Playgroud)

最后,您还必须将这个新分配的 tableView 属性设置为表的委托和数据源。您可以在“viewDidLoad”方法中执行此操作,如下所示:

- (void)viewDidLoad
{
    [super viewDidLoad];

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

}
Run Code Online (Sandbox Code Playgroud)

当选择 UITextField 时,这将停止 UITableViewController 中固有的自动滚动。然后由您来实现任何必要的 UITableViewDataSource 方法,并处理您自己的自动滚动方法。