Czy można w jakiś sposób przechowywać wystąpienie UIView w taki sposób, aby można było uzyskać do niego dostęp z innych kontrolerów widoku? Wiem, że to prawdopodobnie graniczy z „globalami”, o których mówią, że są złe, ale robię dygresję. Wiem tylko, że mam kilka kart UITabBar, które muszą odwoływać się do tego samego wystąpienia widoku, który został utworzony na jednej karcie i musi zostać ponownie wyświetlony na innej karcie. Jakie jest najlepsze podejście do robienia czegoś takiego?
3 odpowiedzi
Pewny. Wystarczy przechowywać zachowane odwołanie do obiektu UIView
w obiekcie trwałym. Na przykład możesz dodać zachowaną właściwość do swojej podklasy UIApplicationDelegate
. Możesz mieć tego delegata, aby utworzył wystąpienie widoku, a wszystkie kontrolery po prostu poproszą delegata aplikacji o widok. Jeśli masz kontroler widoku głównego, który jest zawsze dostępny, możesz go tam zachować.
Być może przemyślenie ogólnej struktury aplikacji pomoże znaleźć „właściwe” miejsce do przechowywania UIView
. Poniżej przedstawiam strukturę aplikacji, z której często korzystam, niekoniecznie jako poradę, jak powinieneś ustrukturyzować swoją aplikację, ale jako przykład rozszerzający opcje, które możesz rozważyć, aby pomóc Ci w zastanowieniu się nad najlepszą strukturą dla Twojej aplikacji.
Piszę wiele broszur, takich jak aplikacje dla naszych klientów. W tych aplikacjach muszę przedstawić kilka widoków, każdy w pewnym sensie analogiczny do stron w broszurze. Niektóre z tych widoków będą miały interakcję z użytkownikiem i będą musiały zachować swój stan poza ekranem lub udostępniać dane stanu innym widokom.
Aby zarządzać tymi aplikacjami, tworzę obiekt menedżera prezentacji. Ten obiekt zachowa ogólny stan aplikacji, w tym widoki, które muszą pozostać, gdy nie są wyświetlane. Używam jednego głównego UIViewController, który jest właścicielem menedżera prezentacji i jest odpowiedzialny za wszystkie typowe operacje kontroli widoku. Konkretna logika dla poszczególnych widoków zostanie umieszczona w podklasach UIView dla każdego widoku. Te indywidualne widoki są tworzone przez menedżera prezentacji i mogą poprosić tego menedżera o to, co wie, w tym o wszelkie stałe widoki.
Możesz po prostu użyć iniekcji zależności, aby wstrzyknąć tę samą instancję widoku do kontrolerów widoku w następujący sposób:
UIView *myView = [UIView new];
UIViewController *controller1 = [UIViewController new];
UIViewController *controller2 = [UIViewController new];
controller1.view = myView;
controller2.view = myView;
[myView release];
Jeśli używasz UITabBar, sugerowałbym dodanie własnego widoku do okna w delegatze aplikacji. Wtedy nie musisz go przechowywać, po prostu go ukryj. Możesz użyć NSNotificationCenter do wysyłania powiadomień w celu wyświetlenia widoku lub możesz wywołać aplikację appDelegate i wyświetlić widok ręcznie.
Podobne pytania
Nowe pytania
iphone
NIE używaj tego znacznika, chyba że adresujesz konkretnie iPhone'a i / lub iPoda touch firmy Apple. W przypadku pytań niezależnych od sprzętu użyj tagu [ios]. Więcej tagów do rozważenia to [xcode] (ale tylko jeśli pytanie dotyczy samego IDE), [swift], [objective-c] lub [cocoa-touch] (ale nie [cocoa]). Proszę powstrzymać się od pytań dotyczących iTunes App Store lub iTunes Connect. Jeśli używasz języka C #, oznacz tagiem [mono].