2011-05-23 6 views
5

Mam UITableViewCell z UITextField. W trybie edycji, gdy klawiatura się pojawi, wiersz, który próbuję edytować, zostanie nałożony na klawiaturę. W idealnym przypadku wiersz powinien przewijać się w górę, aby móc edytować komórkę.Wykonywanie tableviewcell przewijania w górę na wyświetlanej klawiaturze

Mam przeszukane stackoverflow i znalazłem kilka różnych rozwiązań. Większość z nich ma do czynienia z obliczeniami, aby przesunąć lub przewinąć widok. Teraz jest przykładowy kod z jabłka o nazwie TaggedLocations. Mają dokładnie takie samo zachowanie. I nie ma kodu wykonującego skomplikowane obliczenia, aby przesunąć widok w górę.

Również dokładnie sprawdziłem interfejs IB i nie mogłem znaleźć żadnej wymyślnej rzeczy. Jeśli pobierzesz i uruchomisz kod, pięknie popchnie wiersz do idealnej pozycji do edycji.

Czy ktoś wie, jaka sztuczka jest w projekcie TaggedLocations, który robi to tak elegancko? Lokalizacja projektu: http://developer.apple.com/library/ios/#samplecode/TaggedLocations/Introduction/Intro.html%23//apple_ref/doc/uid/DTS40008914

Dla skomplikowanych obliczeń miałem na myśli, spójrz na poniższym wątku na przykład:

How to make a UITextField move up when keyboard is present?

dzięki

Odpowiedz

1

Wymyśliłem problem. Początkowo miałem

TabBarController
- UIViewController
- UINavigationController
--- UITableViewController

- UIViewController
- -UINavigationController
--- UITableViewController

Z tego rodzaju hierarchia komórki tabeli nie zwijają się, gdy wyświetlana jest klawiatura. Ale jeśli zmienię hierarchię na następującą, zwijanie się odbywa się bez żadnego dodatkowego kodu!

TabBarController
- UINavigationController
- UITableViewController

- UINavigationController
- UITableViewController

Kiedy powielane kod jabłko, jakoś pomieszane hierarchię. Teraz, przechodząc na nową hierarchię, działa dobrze. Bez dodatkowego kodu ani obliczenia.

+0

Mam dokładnie ten sam problem, ale mam wspomnienie, które wspomniałeś, które naprawiło twój problem. Jednak mój problem nadal pozostaje. Czy napotkaliście jakiekolwiek inne problemy, które mogą spowodować? –

+0

Dzięki. Twoja odpowiedź naprawdę pomogła. Mały dodatek, jeśli nie możesz wyeliminować UIViewController ze swojej hierarchii, możesz utworzyć UINavigationController z kontrolerem tableview jako root i dodać widok kontrolera nawigacyjnego jako podgląd do twojego VC. Mam nadzieję, że pomaga niektóre !. – Vignesh

1

Linia ta w RootViewController.m jest to, co powoduje, zwój:

[self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:YES]; 

Umieść to w swoim cellForRowAtIndexPath: metoda i powinno działać.

+0

Próbowałem tego. To nie to. To tylko wchodzi w grę w celu dodania nowych wydarzeń. Jeśli widzisz, przewijanie działa również w celu edycji. Również wybór znaczników ma podobne zachowanie i nie ma takiego kodu przewijania, o którym wspomniałeś. Ponadto nie jest to metoda cellForRowAtIndexPath :. – mbh

+0

Przykro mi, 'cellForRowAtIndexPath:' prawdopodobnie nie jest najlepszą metodą do wprowadzenia tego. Co zrobić, aby twoja klasa była zgodna z UITextFieldDelegate, wtedy w 'textFieldDidBeginEditing' jakoś dostajesz ścieżkę indeksu dla wiersza, w którym znajduje się pole tekstowe, a następnie wywołać linię kodu powyżej w tej metodzie? Nie zagłębiam się w kod Apple'a, ale "scrollToRowAtIndexPath" wydaje się dokładnie tym, czego potrzebujesz ... –

+0

Niestety, to nie jest właściwy kod. To nie działa. Nawet jeśli skomentujesz to, otrzymasz takie samo zachowanie. – mbh

0

lub zadzwoń viewWillAppear, jeśli masz własną hierarchię kontrolerów ... wtedy widoki tabel automatycznie przewijają komórki, aby były widoczne po wyświetleniu klawiatury.

0

Miałem podobne zamieszanie z przykładowym kodem Apple TaggedLocations, chociaż w moim przypadku zdałem sobie sprawę, że mój widok tabeli był zarządzany przez podklasę UIViewController w przeciwieństwie do podklasy UITableViewController, a UITableViewController najwyraźniej zarządza przewijaniem dla ciebie. Działa całkiem dobrze, więc wiele z tych skomplikowanych obliczeń jest niepotrzebnych. Szkoda, że ​​nie spędziłem tak dużo czasu, próbując je rozgryźć.

Nie rozumiem, dlaczego hierarchia, którą opisujesz, ma znaczenie. Dopóki kontroler UITableViewController zarządza polami tekstowymi, powinien automatycznie zająć się przewijaniem, aby uniknąć klawiatury.

Powiązane problemy