【问题标题】:Prevent UITableView from scrolling to cell containing textField防止 UITableView 滚动到包含 textField 的单元格
【发布时间】:2013-04-14 10:56:00
【问题描述】:

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

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

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

【问题讨论】:

  • 我不确定是因为它是 UITableView,而不是直接的 UIScrollView,还是因为这些解决方案是在较旧的 SDK 下提出的,但那篇文章中提出的解决方案都不适合我。对于每个解决方案,我的 TableView 仍然会自动滚动。
  • This answer(mine) 描述了一个相当简单的问题解决方案。

标签: objective-c


【解决方案1】:

我通过实现scrollViewDidScroll: 方法(来自UIScrollViewDelegate 协议)解决了这个问题。当键盘使您的UITableView 滚动时调用此方法。

这是我所做的:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    [tableViewController.tableView setContentOffset:CGPointMake(0., 0.)];
}

【讨论】:

  • 此方法在任何内容偏移更改时调用。
【解决方案2】:

我遇到了同样的问题,我在一个较小的容器视图中有一个 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时,可停止UITeViewController中固有的自动滚动。然后由您来实现任何必要的 UITableViewDataSource 方法,并处理您自己的自动滚动方法。

【讨论】:

    猜你喜欢
    • 2018-06-16
    • 1970-01-01
    • 2011-02-24
    • 1970-01-01
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    • 2020-08-13
    • 1970-01-01
    相关资源
    最近更新 更多