w mojej aplikacji Mam UITabeView
z UITextField
s wewnątrz każdej komórki. Mam jednak problemy z zaimplementowaniem przycisków previous/next, aby pole tekstowe wewnątrz poprzedniego/następnego UITableViewCell
było pierwszym obiektem odpowiadającym.Implementacja przycisków Poprzedni/Następny tekst w widoku UITableView w celu uczynienia pierwszego respondenta UITextField w niewidocznej komórce
Podklasowałem klasę UITableViewCell
, aby wywołać określoną metodę jej delegate
po naciśnięciu przycisków prev./next i przekazaniu samej komórki jako parametru tej metody (dzięki czemu mogę uzyskać jej ścieżkę indeksu obliczyć, który jest ścieżką indeks komórce, którego pole tekstowe musi być wykonany pierwszy responder)
W realizacji metody delegata I:
- uzyskać ścieżkę indeksu komórki, której przycisk został naciśnięty
- dodać lub odjąć 1 od indeksu pa th z tej komórki (w zależności, na którym został naciśnięty przycisk)
- dostać komórkę którego textfield musi być wykonany pierwszy responder używając metody
-cellForRowAtIndexPath:
na widoku tabeli - uczynić pole tekstowe first responder
problemu jest to, że metoda -cellForRowAtIndexPath:
zwraca komórkę tylko wtedy, gdy jest widoczna. Więc gdy komórka nie jest widoczna, zwróci ona nil
, a powyższy algorytm nie zadziała, a gdy komórka jest na ekranie, będzie działać poprawnie.
Oto mój kod dla prev. przycisk, pod warunkiem, że MUInfoMateriaTableViewCell
jest mój podklasa UITableViewCell
i że ma właściwość textField
zwracającą jego pola tekstowego:
- (void)prevButtonPressedInCell:(MUInfoMateriaTableViewCell *)cell
{
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
NSIndexPath *previousIndexPath = [NSIndexPath indexPathForRow:indexPath.row-1 inSection:indexPath.section];
MUInfoMateriaTableViewCell *newCell = (MUInfoMateriaTableViewCell *)[self.tableView cellForRowAtIndexPath:previousIndexPath];
[newCell.textField becomeFirstResponder];
}
Czy istnieje jakiś sposób, aby „dostać” do komórki, która nie jest widoczna, więc mogę zrobić jego tekst pole pierwszy odpowiadający? Czy możesz zaproponować mi inny algorytm do obejścia tego problemu?
Jak zasugerować śledzenie komórki, której pole tekstowe powinno być pierwszym reagowaniem? Czy powinienem mieć coś takiego jak 'activeCellIndexPath' i sprawdzić, czy ścieżka indeksu aktywnej komórki pasuje do ścieżki indeksu komórki przekazanej jako parametr w' tableView: willDisplayCell: forRowAtIndexPath: 'czy jest tam lepszy/bardziej wydajny? podejście? – BigLex
Wdrażałbym dokładnie to, co właśnie opisałeś. Pamiętaj, aby obsłużyć przypadek, w którym nie chcesz, aby jakaś komórka odpowiadała i 'nil' out 'activeCellIndexPath'. – jszumski
OK! Dziękuję Panu! – BigLex