2011-12-18 12 views
6

Mam widok tabeli z niestandardowymi nagłówkami sekcji. Widok nagłówka sekcji jest zdefiniowany w scenorysie i podłączony do zmiennej instancji. Czy istnieje sposób, aby poprosić o nowe wystąpienie widoku z storyboardu?Ponowne użycie widoku z serii ujęć

W przeszłości Zrobiłem to poprzez nagłówek sekcji zdefiniowane we własnym pliku XIB i coraz nową instancję za pomocą

[[NSBundle mainBundle] loadNibNamed:@"TimerViewSectionHeader" owner:self options:nil]; 
UIView *newHeaderView = self.sectionHeaderView; 

Odpowiedz

3

dont think istnieje sposób, aby to zrobić. Najlepszym rozwiązaniem jest umieszczenie niestandardowego widoku nagłówka tableview w oddzielnym stalówce i załadowanie go tak, jak w przypadku próbki kodu, kiedy tylko chcesz jej użyć.

+0

+1 ode mnie. Spędziłem wiele godzin próbując dowiedzieć się, jak wyświetlić widoki nagłówka tabeli w trybie Storyboard, ponieważ pomyślałem Storyboard był nowy i ulepszony sposób układania interfejsu użytkownika mojej aplikacji. Niestety używanie Storyboard nie jest możliwe w tym dziale, a najlepszym rozwiązaniem jest powrót do starego sposobu ładowania stalówki do widoku lub budowania widoku za pomocą kodu. Naprawdę chciałem uwierzyć, że cały UI mojej aplikacji można zrobić w jednym pliku Storyboard, ale na pewno nie jest tak. – ozz

0

Byłem w stanie ponownie wykorzystać widok w serii ujęć, łącząc przejście z jednego widoku tabeli do tego, które chcę ponownie wykorzystać.

więc mój tableview, który chcę ponownie użyć jest wskazany dwa razy. To działa, ale problem, na który się natknę, ustawia zmienną (używając instantiateViewControllerWithIdentifier) ​​w mojej aplikacji deleguję do mojego widoku tabeli, który jest ponownie wykorzystywany. Wygląda na to, że jeśli ponownie go wykorzystam, storyboard tworzy 2 instancje mojego tableview, a ten, który otrzymuję z instantiateViewControllerWithIdentifier, nie jest tym, który chcę.

Nie jestem do końca pewien, czy to właściwy sposób. Ale zakładam, że wielu robi to jakoś. W przypadku niestandardowych komórek tabeli w scenopisie podejrzewam, że wiele osób chce ponownie wykorzystać swoje poglądy.

3

Próbowałem zrobić to samo i wpadłem na ten sam problem.

Bardzo lubię pracować ze scenorysami i byłem pod wrażeniem, jak szybko mogę stworzyć działający interfejs użytkownika. Jednak zaraz po ponownym użyciu widoków warto umieścić je w oddzielnej stalówce wraz z podklasą UIViewController.

Następnie można umieścić rodzajowe UIView we wszystkich miejscach, gdzie ponownie wykorzystywane widok powinien iść i dodać widok używając ViewController:

[myReusableViewController loadView]; 
[myReusableViewController viewDidLoad]; // You have to handle view callbacks yourself. 

[self.myReusableViewPlaceholder addSubview:myResusableViewController.view]; 
[myReusableViewController viewWillAppear:YES]; 

tak Podsumowując:

  • Użyj scenorysu, to świetnie
  • Utwórz rusztowanie swojej aplikacji w serii ujęć wraz z dowolnym widokiem statycznym (np. Ekrany Informacje itp.)
  • Utwórz ponownie wykorzystane widoki w niestandardowej podklasie nib + UIViewController i dodaj w zestawie obiekty zastępcze UIView.

W innej odpowiedzi Myślałam o jakimś Pros and Cons of Storyboard

+0

Jesteś pewien, że musisz zadzwonić do oddzwonienia samemu - to wygląda na dziwaczne dla mnie – Rhubarb

+0

mimo to +1 dla idei używania UIView jako symbolu zastępczego. Zauważ, że możesz połączyć to z odpowiedzią Krejko powyżej, i zamiast ładować kontroler z końcówki, załaduj go z storyboardu (możesz użyć jednego storyboardu do przechowywania wielu różnych widoków) – Rhubarb

+0

@Rhubarb Nie jestem w 100% pewny, że Muszę wykonać wywołania zwrotne samemu, ale jeśli umieścisz widok, to jesteś odpowiedzialny za wywoływanie tego, wydaje się. Zauważ, że w iOS6.0 jest nowy mechanizm do osadzenia całego ViewControllera w obszarze bieżącego kontrolera widoku za pomocą Segmentu Osadzania. To może być również opcja. – Besi

3

Rozwiązanie ja wpadliśmy na ten przedstawia się następująco:

Mam tableview z wielu komórek prototypowych, które wyświetla złożonych danych. Istnieje segue do widoku szczegółów i widok procesu transakcji.

Ten pierwszy widok tabeli ma przycisk wyszukiwania, który wyświetla nowy widok tabeli z wynikami.Potrzebuje tej samej funkcjonalności co główna tabela, która ją popycha; w tym segues do szczegółów i widoków postępów transakcji, tak:

Na scenorysie wybierz i skopiuj główny widok tabeli. Odznacz i wklej. Stwórz przejście z głównego widoku do drugiego widoku stołu; lub z dowolnego miejsca, z którego chcesz nawigować. Zmodyfikuj drugi widok tabeli według własnego uznania. IE: Jeśli wymaga pewnych zmian interfejsu, nie ma problemu.

Utwórz nową klasę viewcontroller, która jest podklasą obiektu viewcontroller z uruchomionym głównym widokiem tabeli.

Zastępuj delegata danych w podklasie, aby obsłużyć podzbiór żądanych danych.

Wracając do scenorysu, wybierz drugi kontroler widoku stołu, aw inspektorze tożsamości wybierz swoją podklasę jako klasę niestandardową.

Aby to rozwiązanie działało sprawnie, Twoja aplikacja naprawdę musi zarządzać danymi dla widoków. Możesz użyć funkcji prepareforsegue do przekazania danych z pierwszego widoku tabeli do drugiego, ale znalazłem model danych aplikacji o wiele bardziej elastyczny z wielu punktów widzenia.

O ile nie masz przycisków, które popychają do widoków podrzędnych przez segue, twoja podklasa będzie musiała przesłonić funkcje, które popychają poprzez segues z tożsamościami. NB Segmenty muszą mieć unikalne identyfikatory, jeśli w ogóle je identyfikujesz.

Trzeba było wielu prób i błędów, aby to rozgryźć, ale gdy już zrozumie się tę koncepcję, jest to względnie płynne rozwiązanie, które można łatwo przystosować i nie zaszkodzi.

3

Nie jestem pewien, po prostu widoki, ale sposób, w jaki udało mi się uzyskać kontrolerów widoku z mojego storyboard jest następujący.

UIViewController *viewController = [self.storyboard instantiateViewControllerWithIdentifier:@"IdentifierName"]; 

Stąd być może będziesz mógł użyć tego podobnie jak kiedyś ze stalówkami.

+0

To powinno być oznaczone poprawną odpowiedzią – Yariv

Powiązane problemy