Создание многократно используемого элемента управления, который может быть встроен в UIViews и обрабатывать свои собственные модальные окна.

Есть особый элемент управления, который я пытаюсь построить должным образом. Я называю это ImageTile. По сути, это небольшой квадратный квадрат, который, когда пользователь нажимает на него, предоставляет пользователю (через лист действий во всплывающем окне) возможность выбрать изображение из библиотеки или сделать фотографию. В зависимости от ответа я либо представляю UIImagePickerController внутри всплывающего окна (для выбора изображения), либо модально (для создания нового изображения). Как только они берут/выбирают изображение, у меня появляется модальное представление, которое позволяет им редактировать изображение несколькими простыми способами. Когда они заканчивают редактирование, модальное окно закрывается, а исходный ImageTile вместо пустого квадратного поля заполняется отредактированным пользователем изображением.

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

Первоначально я сделал его подклассом UIViewController (чтобы он мог отображать модальные окна и т. д.) и просто добавил его представление в качестве подвида представления «держателя» на экране. Я знаю, что это не рекомендуется, так как тогда контроллер не является частью иерархии VC... и, кроме того, я столкнулся с очень странным поведением в отношении таких вещей, как автоповорот, особенно когда была задействована камера.

Каков «правильный» способ реализовать что-то подобное?


person DanM    schedule 22.10.2014    source источник


Ответы (1)


Я думаю, что то, что вы сделали, сделав его подклассом UIViewController, правильно. Вы должны просто использовать методы, которые UIViewController предоставляет для добавления дочерних контроллеров представления, таких как - addChildViewController:.

Вы также заметите, что в Interface Builder есть объект Container View, разработанный специально для хранения места в иерархии для дочернего контроллера представления:

введите здесь описание изображения

person i_am_jorf    schedule 22.10.2014