Próbuję to zrobić od kilku dni i po przeczytaniu ton wiadomości od osób, które również próbują to zrobić, nadal nie jestem w stanie w pełni działać UITextField
w niektórych z moich UITableViewCells
, tak jak w tym przykładzie:
Albo mam działający formularz, ale tekst nie jest widoczny (chociaż ustawiłem jego kolor na niebieski), klawiatura pojawia się na polu po kliknięciu i nie jestem w stanie poprawnie zaimplementować zdarzeń klawiatury. Próbowałem z kilkoma przykładami od Apple (głównie UICatalog
tam, gdzie jest coś w rodzaju podobnej kontroli), ale nadal nie działa poprawnie.
Czy ktoś może mi pomóc (i wszystkim osobom próbującym zrealizować tę kontrolę) i opublikować prostą implementację UITextField
w UITableViewCell
, która działa dobrze?
CGRectMake(A_MAGIC_NUMBER, ANOTHER_MAGIC_NUMBER, YET_ANOTHER_HARDCODED_MAGIC_NUMBER, OH_HERES_ANOTHER_MYSTERIOUS_HARDCODED_MAGIC_NUMBER)
? Skąd pochodzą te liczby?Odpowiedzi:
Wypróbuj to. Działa jak urok dla mnie (na urządzeniach iPhone). Raz użyłem tego kodu do ekranu logowania. Skonfigurowałem widok tabeli, aby miał dwie sekcje. Możesz oczywiście pozbyć się warunkowych sekcji.
Wynik wygląda następująco:
źródło
[_field addTarget:self action:@selector(editingEnded:) forControlEvents:UIControlEventEditingDidEnd];
.[cell addSubview:playerTextField];
aby uruchomić go z iOS 5.0+.Oto rozwiązanie, które wygląda dobrze pod iOS6 / 7/8/9 .
Aktualizacja 2016-06-10: nadal działa z iOS 9.3.3
Dzięki za wsparcie, teraz jest to na CocoaPods / Carthage / SPM na https://github.com/fulldecent/FDTextFieldTableViewCell
Zasadniczo bierzemy zapas
UITableViewCellStyleValue1
i zszywamy tam,UITextField
gdziedetailTextLabel
powinien być. Daje nam to automatyczne umieszczanie we wszystkich scenariuszach: iOS6 / 7/8/9, iPhone / iPad, Obraz / Brak obrazu, Akcesoria / Brak akcesoriów, Pionowo / Poziomo, 1x / 2x / 3x.Uwaga: używa to scenorysu z
UITableViewCellStyleValue1
komórką typu o nazwie „słowo”.źródło
UITableViewCellStyleRightDetail
to rozumieszUITableViewCellStyleValue1
?Oto jak to osiągnąłem:
TextFormCell.h
TextFormCell.m
To może wydawać się trochę gadatliwe, ale działa!
Nie zapomnij ustawić delegata!
źródło
Spróbuj tego. Może również obsługiwać przewijanie i możesz ponownie wykorzystać komórki bez kłopotów z usuwaniem dodanych wcześniej widoków podrzędnych.
źródło
To nie powinno być trudne. Podczas tworzenia komórki dla tabeli dodaj obiekt UITextField do widoku zawartości komórki
Ustaw delegata UITextField jako self (tj. Kontroler widoku) Daj znacznik do pola tekstowego, abyś mógł określić, które pole tekstowe było edytowane w twoich metodach delegowania. Klawiatura powinna wyskoczyć, gdy użytkownik dotknie pola tekstowego. Mam to działające w ten sposób. Mam nadzieję, że to pomoże.
źródło
CGRectZero
jako ramkę, upewnij się, że ustawiłeś ramkę pola tekstowego przed dodaniem go do hierarchii widoku. Uzyskiwanie właściwości widoku zawartości komórkiframe
jest szczególnie pomocne w przypadku takiego zadania.Detale
Pełny przykładowy kod
Wynik
źródło
Unikałem tego, wywołując metodę uruchamiania za
[cell.contentView bringSubviewToFront:textField]
każdym razem, gdy pojawiały się moje komórki, ale potem odkryłem tę stosunkowo prostą technikę:Wydaje się, że nie ma tego samego problemu polegającego na przepełnieniu tła i sam się dostosowuje (nieco). Ponadto textLabel automatycznie się obcina, aby uniknąć przepełnienia go (lub poniżej), co jest przydatne.
źródło
Natrafiłem na ten sam problem. Wygląda na to, że ustawienie tej
cell.textlabel.text
właściwości przenosi UILabel na przód contentView komórki. Dodaj textView po ustawieniutextLabel.text
lub (jeśli nie jest to możliwe) wywołaj to:źródło
Naprawdę zmagałem się z tym zadaniem na iPadzie, z polami tekstowymi wyświetlanymi niewidocznymi w UITableView, a cały wiersz zmienia kolor na niebieski, gdy staje się aktywny.
Na koniec zadziałała dla mnie technika opisana w części „Technika statycznej zawartości wierszy” w Przewodniku programowania widoków tabel firmy Apple . Umieszczam zarówno etykietę, jak i pole tekstowe w UITableViewCell w NIB dla widoku, i wyciągam tę komórkę przez gniazdko
cellForRowAtIndexPath:
. Wynikowy kod jest znacznie ładniejszy niż UICatalog.źródło
Oto, jak to się robi, uważam, że to właściwy sposób. Działa na iPadzie i iPhonie podczas testowania. Musimy stworzyć własne komórki niestandardowe, klasyfikując komórkę uitableviewcell:
zacznij w interfejsieBuilder ... utwórz nowy kontroler UIView nazywaj go customCell (zgłaszaj się na xib, gdy tam jesteś) Upewnij się, że customCell jest podklasą uitableviewcell
usuń teraz wszystkie widoki i utwórz jeden widok, który ma rozmiar pojedynczej komórki. uczyń tę komórkę widoku podklasą niestandardową. teraz utwórz dwa inne widoki (duplikuj pierwszy).
Przejdź do inspektora połączeń i znajdź 2 IBOutlety, które możesz teraz połączyć z tymi widokami.
-backgroundView -SelectedBackground
połącz je z dwoma ostatnimi widokami, które właśnie skopiowałeś i nie martw się o nie. pierwszy widok, który rozszerza customCell, umieść w nim etykietę i pole uitextfield. dostałeś się do customCell.h i podłączyłeś swoją etykietę i pole tekstowe. Ustaw wysokość tego widoku, aby powiedzieć 75 (wysokość każdej komórki) wszystko zrobione.
W pliku customCell.m upewnij się, że konstruktor wygląda mniej więcej tak:
Teraz utwórz kontroler UITableView iw tej metodzie użyj klasy customCell w następujący sposób:
}
źródło
Oto podklasa rozwijana, dla
UITableViewCell
której zamienia detailTextLabel na edytowalnyUITextField
(lub, w przypadkuUITableViewCellStyleDefault
, zastępuje textLabel ). Ma to tę zaletę, że pozwala ponownie użyć wszystkich znanych UITableViewCellStyles, akcesoriówViews itp., Właśnie teraz szczegóły można edytować!Prosty w użyciu - po prostu utwórz komórkę jak poprzednio, ale teraz użyj cell.textField zamiast cell.detailTextLabel (lub cell.textLabel w przypadku
UITableViewCellStyleDefault
). na przykładZainspirowany i ulepszony przez odpowiedź FD
źródło
Dla następnych / zwrotnych zdarzeń na wielu polach UIText wewnątrz UITableViewCell w tej metodzie wziąłem UITextField w serii ujęć.
Aby pobrać tekst z pola tekstowego
źródło