Chcę dostosować UITableView
nagłówek dla każdej sekcji. Do tej pory wdrożyłem
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
ta UITabelViewDelegate
metoda. Chcę uzyskać bieżący nagłówek dla każdej sekcji i po prostu dodać go UILabel
jako widok podrzędny.
Jak dotąd nie jestem w stanie tego zrobić. Ponieważ nie mogłem znaleźć niczego, aby uzyskać domyślny nagłówek sekcji. Pierwsze pytanie, czy istnieje sposób na uzyskanie domyślnego nagłówka sekcji ?
Jeśli nie jest to możliwe, muszę utworzyć widok kontenera, który jest UIView
ale, tym razem muszę ustawić domyślny kolor tła, kolor cienia itp. Ponieważ, jeśli dokładnie przyjrzysz się nagłówkowi sekcji, jest on już dostosowany.
Jak mogę uzyskać te domyślne wartości dla każdego nagłówka sekcji?
Dziękuję wam wszystkim.
ios
objective-c
swift
uitableview
limon
źródło
źródło
tableView:titleForHeaderInSection:
?NSString
, muszę ustawić niestandardową czcionkę, więc nie mogę, jeśli używamtableView:titleForHeaderInSection:
Odpowiedzi:
Możesz spróbować tego:
źródło
Wybrana odpowiedź za pomocą
tableView :viewForHeaderInSection:
jest poprawna.Po prostu podziel się wskazówką tutaj.
Jeśli używasz storyboard / xib, możesz utworzyć kolejną prototypową komórkę i użyć jej jako „komórki sekcji”. Kod służący do konfigurowania nagłówka jest podobny do sposobu konfigurowania komórek wierszy.
źródło
viewForHeaderInSection
niecanEditRowAtIndexPath
jak wspomniano. Nigdy nie weryfikuję awarii, o której mówiłeś, ale czy możesz wyjaśnić, jak długie naciśnięcie spowoduje awarię?UITableViewCell
jako widoku nagłówka. Będziesz bardzo trudno debugować wizualne usterki - nagłówek czasami znika z powodu tego, jak komórki są usuwane z kolejki i będziesz szukał przez wiele godzin, dlaczego tak jest, dopóki nie zorientujesz się,UITableViewCell
że nie należy doUITableView
nagłówka.UITableViewCell
jako nagłówka jest po prostu niewłaściwe.Szybka wersja Lochana Tejas odpowiedź:
źródło
override
kluczowe jest zbędne. Co więcej, rozważ ponowne użycie widoków nagłówków zamiast ich ponownego tworzenia.Jeśli używasz domyślnego widoku nagłówka, możesz zmienić tylko tekst w nim za pomocą
Dla Swift:
Jeśli chcesz dostosować widok, musisz samodzielnie stworzyć nowy.
źródło
dlaczego nie użyć UITableViewHeaderFooterView ?
źródło
Jeśli headerInSection nie jest wyświetlany, możesz spróbować tego.
Zwraca wysokość nagłówka danej sekcji.
źródło
Swift 3 wersja lochana i estemendoza odpowiedzi:
Pamiętaj również, że musisz TAKŻE zaimplementować:
źródło
Spróbuj tego......
źródło
Inne odpowiedzi dobrze sobie radzą z odtwarzaniem domyślnego widoku nagłówka, ale tak naprawdę nie odpowiadają na twoje główne pytanie:
Jest na to sposób - po prostu zaimplementuj
tableView:willDisplayHeaderView:forSection:
w swoim delegacie. Domyślny widok nagłówka zostanie przekazany do drugiego parametru, a stamtąd możesz goUITableViewHeaderFooterView
przesłać do, a następnie dodać / zmienić podglądy według własnego uznania.Obj-C
Szybki
źródło
view
.źródło
To najłatwiejsze możliwe rozwiązanie. Poniższego kodu można użyć bezpośrednio do utworzenia niestandardowego nagłówka sekcji.
UWAGA: SectionHeaderTableViewCell to niestandardowy UITableViewCell utworzony w Storyboard.
źródło
Na twoim miejscu stworzyłbym metodę, która zwraca UIView z podanym NSString, który ma zawierać. Na przykład
W implementacji tej metody utwórz UIView, dodaj do niego UILabel z właściwościami, które chcesz ustawić, i oczywiście ustaw jego tytuł na podany.
źródło
Rozwiązanie @ samwize w języku Swift (więc popieraj go!). Genialne użycie tego samego mechanizmu recyklingu również dla sekcji nagłówka / stopki:
źródło
Jeśli chcesz zmienić czcionkę textLabel w nagłówku sekcji, chcesz to zrobić w willDisplayHeaderView. Aby ustawić tekst, możesz to zrobić w viewForHeaderInSection lub titleForHeaderInSection. Powodzenia!
źródło
Pełny przykład 2019 do skopiowania i wklejenia
Pierwszy zestaw „Zgrupowany” w scenorysie: musi to nastąpić w czasie początkowym, nie można tego ustawić później, więc łatwiej jest zapamiętać, aby zrobić to na scenorysie:
Kolejny,
Musi zaimplementować heightForHeaderInSection z powodu błędu Apple.
Wciąż istnieje błąd Apple - od dziesięciu lat - w którym po prostu nie wyświetla pierwszego nagłówka (tj. Indeksu 0), jeśli nie masz
heightForHeaderInSection
połączenia.Więc
tableView.sectionHeaderHeight = 70
po prostu nie działa, jest zepsuty .Ustawienie ramki nic nie daje:
W
viewForHeaderInSection
prostu utwórz UIView ().To bezcelowe / nic nie osiągniesz, jeśli UIView (ramka ...) ponieważ iOS po prostu ustawia rozmiar widoku zgodnie z tabelą.
Więc pierwsza linijka
viewForHeaderInSection
będzie prostalet view = UIView()
i to jest widok, do którego wracasz.To wszystko - wszystko inne to strata czasu.
Kolejny „kapryśny” problem Apple.
Użyte powyżej rozszerzenie wygody to:
źródło
Szybko dodaj magicznie nagłówek widoku tabeli
Ostatnio tego próbowałem.
Potrzebowałem jednego i tylko jednego nagłówka w całym UITableView.
Tak jak chciałem UIImageView na górze TableView. Więc dodałem UIImageView na górze UITableViewCell i automatycznie został dodany jako tableViewHeader. Teraz podłączam ImageView do ViewController i dodałem Image.
Byłem zdezorientowany, ponieważ zrobiłem coś takiego po raz pierwszy. Aby usunąć zamieszanie, otwórz format xml tablicy MainStoryBoard i stwierdziłem, że widok obrazu został dodany jako nagłówek.
U mnie zadziałało. Dzięki xCode i szybko.
źródło
wywołać tę metodę delegata
da to szansę na automatyczne dodanie domyślnego nagłówka z dynamicznym tytułem.
Możesz użyć nagłówka / stopki wielokrotnego użytku i dostosowywalnego.
https://github.com/sourov2008/UITableViewCustomHeaderFooterSection
źródło
swif 4.2
źródło
oprócz titleForHeaderInSection możesz po prostu zmienić widok nagłówka, stopki. sprawdź mój komentarz tutaj: Zmień kolor tła sekcji UITable bez utraty tytułu sekcji
źródło
Jeśli chcesz tylko dodać tytuł do nagłówka tableView, nie dodawaj widoku. W swift 3.x kod wygląda tak:
Możesz zaimplementować tablicę, aby pobrać tytuł dla nagłówków.
źródło
Wracając do pierwotnego pytania (4 lata później), zamiast przebudowywać własny nagłówek sekcji, iOS może po prostu zadzwonić do Ciebie (z willDisplayHeaderView: forSection :) zaraz po utworzeniu domyślnego. Na przykład chciałem dodać przycisk wykresu na prawej krawędzi nagłówka sekcji:
źródło
Służy
tableView: willDisplayHeaderView:
do dostosowywania widoku, gdy ma on zostać wyświetlony.Daje to tę zaletę, że można wziąć widok, który został już utworzony dla widoku nagłówka i rozszerzyć go, zamiast konieczności samodzielnego odtwarzania całego widoku nagłówka.
Oto przykład, który koloruje sekcję nagłówka na podstawie BOOL i dodaje element tekstowy szczegółu do nagłówka.
źródło
Swift 4.2
W Swift 4.2 nazwa tabeli została nieco zmieniona.
źródło