Каков самый простой способ разработать статическую библиотеку iOS, которая предоставляет s собственный модальный интерфейс?

Я разрабатываю статическую библиотеку iOS, которая будет использоваться другими разработчиками. Эта библиотека должна предоставлять собственный модальный пользовательский интерфейс. Я ищу самый простой способ спроектировать интерфейс между приложением и этой библиотекой для достижения этой цели. Мне нужно только поддерживать iOS 4.0 и выше.

Примерная архитектура

Моя статическая библиотека имеет очень простой API с одним классом. AppDelegate приложения создает экземпляр этого одного класса и устанавливает себя в качестве делегата, чтобы он мог получать уведомления. Когда приложение хочет, чтобы библиотека отображала свой пользовательский интерфейс, оно вызывает единственный метод, а затем, когда библиотека завершает свою работу, оно отправляет уведомление через один из методов протокола делегата.

Я вижу два способа сделать это.

Вариант 1

Когда приложение хочет, чтобы библиотека отображала свой пользовательский интерфейс, AppDelegate передает self.window, и библиотека устанавливает собственный корневой контроллер представления, фактически принимая полное владение пользовательским интерфейсом. Когда пользовательский интерфейс завершен, он уведомляет AppDelegate, который затем устанавливает свой собственный корневой контроллер представления в окне, возвращая себе право владения пользовательским интерфейсом.

Вариант 2

Библиотека предоставляет контроллер представления, который приложение может подтолкнуть на любой стек представлений, который ему нравится. Приложение также отвечает за удаление контроллера представления, когда библиотека уведомляет его о завершении работы пользовательского интерфейса.

Проблемы

С вариантом 1,могут возникнуть проблемы с изменением контроллеров корневого представления во время выполнения приложения. С вариантом 2 могут возникнуть проблемы с предоставлением контроллера представления, который может работать в произвольном контексте (как контроллер полнооконного представления, как подчиненное представление UINavigationController и т. Д.).

Другая проблема с обоими вариантами - это другие уведомления UIApplicationDelegate, которые может получать AppDelegate, например applicationWillResignActive: и applicationDidBecomeActive :. Библиотеке может потребоваться обрабатывать подобные уведомления, чтобы должным образом поддерживать свой пользовательский интерфейс. Должен ли AppDelegate передавать каждый из них в библиотеку, когда его пользовательский интерфейс активен?

Есть ли лучший вариант 3, о котором я не думал?

5
задан Bob Whiteman 11 July 2011 в 22:49
поделиться