2013-04-21 66 views
7

的UITableView显得有一些自动行为,其中,如果一个细胞含有包含textField或TextView的,并且该字段或视图变为第一响应,所述的tableView滚动本身,使得该细胞不遮挡通过键盘。我相信,在大多数情况下,这非常方便。防止的UITableView从滚动到含细胞的TextField

对我来说,它没有好。 tableView位于一个较小的containerView中,并且默认行为使该字段仍然模糊不清。我想自己处理移动整个容器,并且默认的滚动行为正在被阻止。

有谁知道我可以“关闭”的UITableView的这个功能吗?

+0

看看这个问题http://stackoverflow.com/questions/4585718/disable-uiscrollview-scrolling-when-uitextfield-becomes-first-responder – 2013-04-21 14:01:48

+0

我不能肯定是否是因为它是一个UITableView,而不是直接的UIScrollView,或者是因为这些解决方案是一个较旧的SDK下提出的,但没有在该职位中提出的解决方案为我工作。对于每个解决方案,我的TableView仍然自动滚动。 – 2013-04-21 16:07:23

+0

[本答案](http://stackoverflow.com/a/32313035/4482870)(矿)描述了该问题的相当简单的解决方案。 – tonso 2015-08-31 14:02:44

回答

1

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

相反,我改变了这种子视图控制器是一个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方法,并处理你自己的自动滚动方法。

0

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

这里是我做过什么:

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

此方法在任何内容偏移量更改上调用。 – Andy 2015-08-04 08:54:24