Właśnie stworzyłem aplikację i zacząłem podłączać @ IBOutlet do storyboardu. Podłączam niektóre z nich do etykiet w komórce prototypowej UITableViewCell ze stylem podstawowym. Kiedy go podłączam, pojawia się ten błąd w Storyboard:
Wylot detailText z TableViewController do UILabel jest nieprawidłowy. Gniazda nie mogą być połączone z powtarzającymi się treściami.
Czy ktoś może mi pomóc? Skonfigurowałem to w sposób, w jaki zawsze robię to pomyślnie, ale tym razem wyrzucił mi ten błąd.
ios
storyboard
Tomblasta
źródło
źródło
Odpowiedzi:
Utwórz podklasę komórki widoku tabeli i ustaw ją jako klasę prototypu. Dodaj gniazda do tej klasy i połącz je. Teraz po skonfigurowaniu komórki masz dostęp do gniazd.
źródło
Istnieją dwa rodzaje komórek widoków tabeli udostępnionych za pośrednictwem scenorysu, są to dynamiczne prototypy i statyczne komórki
1. Dynamiczne prototypy
Z nazwy ten typ komórki jest generowany dynamicznie. Są kontrolowane przez Twój kod, a nie scenorys. Za pomocą delegata widoku tabeli i źródła danych można programowo określić liczbę komórek, wysokość komórek, prototyp komórek.
Kiedy przeciągasz komórkę do widoku tabeli, deklarujesz prototyp komórek. Następnie możesz utworzyć dowolną liczbę komórek na podstawie tego prototypu i dodać je do widoku tabeli
cellForRow
metody, programowo. Zaletą tego jest to, że wystarczy zdefiniować tylko 1 prototyp zamiast tworzyć każdą komórkę ze wszystkimi widokami dodanymi do nich samodzielnie (patrz komórka statyczna).W tym przypadku nie możesz połączyć elementów UI prototypu komórki z kontrolerem widoku. Zainicjowany zostanie tylko jeden obiekt kontrolera widoku, ale może być zainicjowanych i dodanych do widoku tabeli wiele obiektów komórek. Nie ma sensu podłączanie prototypu komórki do kontrolera widoku, ponieważ nie można sterować wieloma komórkami za pomocą jednego połączenia kontrolera widoku. Jeśli to zrobisz, pojawi się błąd.
Aby rozwiązać ten problem, musisz podłączyć prototypową etykietę do
UITableViewCell
obiektu. AUITableViewCell
jest również prototypem komórek i możesz zainicjować dowolną liczbę obiektów komórek, a każdy z nich jest następnie połączony z widokiem generowanym z prototypu komórki tabeli scenorysu.Na koniec w swojej
cellForRow
metodzie utwórz niestandardową komórkę zUITableViewCell
klasy i rób fajne rzeczy z etykietą2. Komórki statyczne
Z drugiej strony, statyczne komórki są rzeczywiście konfigurowane za pomocą scenorysu. Aby je utworzyć, musisz przeciągnąć elementy UI do każdej komórki. Będziesz kontrolować numery komórek, wysokości itp. Z serii ujęć. W takim przypadku zobaczysz widok tabeli, który jest dokładnie taki sam z telefonu w porównaniu z tym, co utworzyłeś z serii ujęć. Do ustawiania strony częściej używane są komórki statyczne, których komórki niewiele się zmieniają.
Aby kontrolować elementy interfejsu użytkownika dla statycznej komórki, rzeczywiście będziesz musiał podłączyć je bezpośrednio do kontrolera widoku i skonfigurować.
źródło
+100
Jeśli używasz widoku tabeli do wyświetlania ustawień i innych opcji (tak jak robi to wbudowana aplikacja Ustawienia), możesz ustawić zawartość widoku tabeli na komórki statyczne w Inspektorze atrybutów . Ponadto, aby to zrobić, musisz osadzić widok tabeli w wystąpieniu UITableViewController.
źródło
Lub nie musisz używać IBOutlet do odwoływania się do obiektu w widoku. Możesz nadać Label w tableViewCell wartość Tag, na przykład ustawić Tag na 123 (może to zrobić inspektor atrybutów). Następnie możesz uzyskać dostęp do etykiety przez
źródło
Ze mną mam
UIViewcontroller
, a do niego mam widok tabeli z niestandardową komórką. Mapuję moje gniazdko UILabel na,UItableviewcell
aUIViewController
następnie otrzymałem błąd.źródło
Jak zauważyła większość ludzi, tworzenie podklas
UITableViewCell
rozwiązuje ten problem. Ale powód jest niedozwolony, ponieważ komórka prototypowa ( UITableViewCell ) jest zdefiniowana przez Apple i nie możesz dodać do niej żadnego własnego gniazdka.źródło
Czasami Xcode nie mógł kontrolować prawidłowego połączenia gniazda komórki.
W jakiś sposób etykieta / przycisk mojej obecnej komórki połączył inną komórkę. Po prostu je usuwam i błąd znika.
źródło
Kliknij symulator, przejdź do okna i włącz ramki urządzeń
źródło