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