Я разрабатываю статическую библиотеку iOS, которая будет использоваться другими разработчиками. Эта библиотека должна предоставлять собственный модальный пользовательский интерфейс. Я ищу самый простой способ спроектировать интерфейс между приложением и этой библиотекой для достижения этой цели. Мне нужно только поддерживать iOS 4.0 и выше.
Примерная архитектура
Моя статическая библиотека имеет очень простой API с одним классом. AppDelegate приложения создает экземпляр этого одного класса и устанавливает себя в качестве делегата, чтобы он мог получать уведомления. Когда приложение хочет, чтобы библиотека отображала свой пользовательский интерфейс, оно вызывает единственный метод, а затем, когда библиотека завершает свою работу, оно отправляет уведомление через один из методов протокола делегата.
Я вижу два способа сделать это.
Вариант 1
Когда приложение хочет, чтобы библиотека отображала свой пользовательский интерфейс, AppDelegate передает self.window, и библиотека устанавливает собственный корневой контроллер представления, фактически принимая полное владение пользовательским интерфейсом. Когда пользовательский интерфейс завершен, он уведомляет AppDelegate, который затем устанавливает свой собственный корневой контроллер представления в окне, возвращая себе право владения пользовательским интерфейсом.
Вариант 2
Библиотека предоставляет контроллер представления, который приложение может подтолкнуть на любой стек представлений, который ему нравится. Приложение также отвечает за удаление контроллера представления, когда библиотека уведомляет его о завершении работы пользовательского интерфейса.
Проблемы
С вариантом 1,могут возникнуть проблемы с изменением контроллеров корневого представления во время выполнения приложения. С вариантом 2 могут возникнуть проблемы с предоставлением контроллера представления, который может работать в произвольном контексте (как контроллер полнооконного представления, как подчиненное представление UINavigationController и т. Д.).
Другая проблема с обоими вариантами - это другие уведомления UIApplicationDelegate, которые может получать AppDelegate, например applicationWillResignActive: и applicationDidBecomeActive :. Библиотеке может потребоваться обрабатывать подобные уведомления, чтобы должным образом поддерживать свой пользовательский интерфейс. Должен ли AppDelegate передавать каждый из них в библиотеку, когда его пользовательский интерфейс активен?
Есть ли лучший вариант 3, о котором я не думал?