2013-04-21 99 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