2013-04-21 8 views
7

Wygląda na to, że UITableView zachowuje się automatycznie, jeśli komórka zawiera textField lub textView, a to pole lub widok staje się pierwszą odpowiedzią, tableView przewija się tak, że komórka nie jest zasłonięta przez klawiaturę. Jestem pewien, że w większości przypadków jest to bardzo przydatne.Zapobieganie przewijaniu UITableView do komórki zawierającej textField

W moim przypadku nie jest dobrze. TableView znajduje się w mniejszym containerView, a domyślne zachowanie pozostawia pole wciąż zasłonięte. Chcę poradzić sobie z przenoszeniem całego kontenera samemu, a domyślne zachowanie przewijania staje na przeszkodzie.

Czy ktoś wie, jak mogę "wyłączyć" tę funkcję UITableView?

+0

spojrzenie na to pytanie http://stackoverflow.com/questions/4585718/disable-uiscrollview-scrolling-when-uitextfield-becomes-first-responder –

+0

I nie jestem pewien, czy to dlatego, że jest to UITableView, a nie prosty UIScrollView, lub dlatego, że rozwiązania te zostały zaproponowane pod starszym SDK, ale żadne z proponowanych rozwiązań w tym poście nie działało dla mnie. Przy każdym rozwiązaniu mój TableView wciąż przewijany jest automatycznie. –

+0

[Ta odpowiedź] (http://stackoverflow.com/a/32313035/4482870) (moja) opisuje raczej proste rozwiązanie problemu. – tonso

Odpowiedz

1

Miałem dokładnie ten sam problem, miałem UITableView w mniejszym widoku kontenera i kiedy wybrałem UITextField w tableView to automatycznie przewinąłoby się do niepożądanej pozycji. Jest to domyślne zachowanie UITableView i wydaje się, że nie ma sposobu na jego wyłączenie.

Zamiast tego zmieniłem ten kontroler subView, aby był podklasą UIViewController zamiast UITableViewController. tj dla mojego TransportViewController.h który kontroluje tableview:

@interface TransportViewController : UITableViewController <UITextFieldDelegate> 

stała:

@interface TransportViewController : UIViewController <UITextFieldDelegate, UITableViewDataSource, UITableViewDelegate> 

Ustalając klasę jako klasę UIViewController zamiast automatycznego przewijania komórek tabeli nie stanie.

Teraz, gdy nie podklasy UITableViewController, musisz teraz ręcznie ustawić właściwość 'tableView', aby wskazywała odpowiedni widok tabeli. Można połączyć to w IB, który daje coś takiego:

@property (strong, nonatomic) IBOutlet UITableView *tableView; 

Wreszcie trzeba będzie również ustawić tę właściwość nowo przypisany Tableview być źródłem delegat i dane z tabeli. Można to zrobić w „viewDidLoad” metody tak:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    _tableView.dataSource = self; 
    _tableView.delegate = self; 

} 

To zatrzyma automatyczne przewijanie, który jest nieodłączną częścią UITableViewController kiedy wybrany jest UITextField. Od Ciebie zależy wdrożenie odpowiednich metod UITableViewDataSource i obsługiwanie własnych metod automatycznego przewijania.

0

Rozwiązałem to, wdrażając metodę scrollViewDidScroll: (z protokołu UIScrollViewDelegate). Ta metoda jest wywoływana, gdy klawiatura przesunie Cię o UITableView.

Oto co zrobiłem:

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

ta metoda jest wywoływana przy każdej zmianie przesunięcia treści. – Andy

Powiązane problemy