UITableView 似乎有一些自动行为,如果单元格包含 textField 或 textView,并且该字段或视图成为第一响应者,则 tableView 会自行滚动,以便单元格不会被键盘遮挡。我敢肯定,在大多数情况下,这非常方便。
就我而言,这不好。tableView 位于较小的 containerView 中,默认行为使该字段仍然被遮挡。我想自己处理整个容器的移动,而默认的滚动行为妨碍了我。
有谁知道我如何“关闭”UITableView 的这个功能?
UITableView 似乎有一些自动行为,如果单元格包含 textField 或 textView,并且该字段或视图成为第一响应者,则 tableView 会自行滚动,以便单元格不会被键盘遮挡。我敢肯定,在大多数情况下,这非常方便。
就我而言,这不好。tableView 位于较小的 containerView 中,默认行为使该字段仍然被遮挡。我想自己处理整个容器的移动,而默认的滚动行为妨碍了我。
有谁知道我如何“关闭”UITableView 的这个功能?
我遇到了同样的问题,我在一个较小的容器视图中有一个 UITableView,当我在 tableView 中选择一个 UITextField 时,它会自动滚动到不希望的位置。这是 UITableView 的默认行为,似乎没有任何方法可以将其关闭。
相反,我将这个 subView 控制器更改为 UIViewController 的子类,而不是 UITableViewController。即对于我的控制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时uitaiteViewController固有的自动滚动。然后由您来实现任何必要的 UITableViewDataSource 方法,并处理您自己的自动滚动方法。
我通过实现该scrollViewDidScroll:
方法(来自UIScrollViewDelegate
协议)解决了这个问题。UITableView
当键盘滚动时调用此方法。
这是我所做的:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
[tableViewController.tableView setContentOffset:CGPointMake(0., 0.)];
}