Projektuję bibliotekę statyczną iOS, która będzie używana przez innych programistów. Ta biblioteka musi dostarczyć własny modalny interfejs użytkownika. Poszukuję najprostszego sposobu zaprojektowania interfejsu między aplikacją a biblioteką, aby to osiągnąć. Potrzebuję tylko obsługi systemu iOS 4.0 i nowszych wersji.Jaki jest najprostszy sposób zaprojektowania biblioteki statycznej iOS, która zapewnia własny modalny interfejs użytkownika?
Szorstki architektura
Moja biblioteka statyczna ma bardzo prosty interfejs API z jednej klasy. Aplikacja AppDelegate tworzy instancję tej jednej klasy i ustawia się jako delegat, aby otrzymywać powiadomienia. Gdy aplikacja chce, aby biblioteka wyświetlała swój interfejs użytkownika, wywołuje pojedynczą metodę, a kiedy biblioteka zakończy pracę, wysyła powiadomienie za pomocą jednej z metod protokołu delegata.
Widzę dwa sposoby osiągnięcia tego.
Wariant 1
Gdy aplikacja chce pokazać swoją bibliotekę do UI The AppDelegate przechodzi w self.window, a biblioteka ustawia swój własny kontroler widoku głównego, skutecznie biorąc pełną odpowiedzialność za UI. Po zakończeniu interfejsu użytkownika powiadamia AppDelegate, który następnie ustawia swój własny kontroler widoku root w oknie, odbierając własność interfejsu użytkownika.
Wariant 2
Biblioteka naraża kontroler widoku, który aplikacja może naciskać na cokolwiek widok stosu to lubi. Aplikacja jest również odpowiedzialna za usunięcie kontrolera widoku, gdy biblioteka powiadomi go, że interfejs został zakończony.
Problemy
z opcją 1, mogą pojawić się problemy zmieniające zobacz korzeń kontrolerów podczas gdy w środku działa aplikacja. W przypadku opcji 2 mogą pojawić się problemy z udostępnieniem kontrolera widoku, który może działać w dowolnym kontekście (jako kontroler widoku pełnoekranowego, jako podmenu UINavigationController, itp.).
Kolejny problem z obiema opcjami to inne powiadomienia UIApplicationDelegate, które może odbierać AppDelegate, takie jak applicationWillResignActive: i applicationDidBecomeActive :. Biblioteka może potrzebować obsługi takich powiadomień, aby poprawnie zachować swój interfejs użytkownika. Czy AppDelegate musi przekazać każdą z nich do biblioteki, gdy jej interfejs jest aktywny?
Czy istnieje lepsza opcja 3, o której nie pomyślałem?
Czy musimy napisać ten kod w klasie NSObject –
Prawie każda klasa, w której to umieściliśmy jest pochodną NSObject i musi to być kod ObjectiveC, więc nie jestem pewien, czy rozumiem twoje pytanie. Zwróć uwagę, że jest to> 2 lata, więc nie mamy pewności, czy jest ono aktualne. – Dad
Tnx za odpowiedź Twój kod działa dobrze. To był błąd w moim kodzie. świetny kod to zaoszczędzić mój czas dużo .. –