7

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

就我而言,这不好。tableView 位于较小的 containerView 中,默认行为使该字段仍然被遮挡。我想自己处理整个容器的移动,而默认的滚动行为妨碍了我。

有谁知道我如何“关闭”UITableView 的这个功能?

4

2 回答 2

1

我遇到了同样的问题,我在一个较小的容器视图中有一个 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 方法,并处理您自己的自动滚动方法。

于 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 回答