Переход от UIImagePickerController

Я пытаюсь сделать переход от UIImagePickerController к другому контроллеру представления.

Я попытался выполнить push-переход, потому что знал, что UIImagePickerController является подклассом UINavigationController, но это не сработало. Ошибка: «Push segues можно использовать только тогда, когда исходный контроллер управляется экземпляром UINavigationController».

Теперь я пробую модальный переход, но когда это происходит, экран становится черным.

Есть ли связь между двумя проблемами, и как я могу сделать, пожалуйста?


person Arnaud    schedule 14.11.2013    source источник


Ответы (1)


Вы не можете выполнить переход непосредственно из файла UIImagePickerController.

Попробуйте добавить push-переход из контроллера представления, который создает экземпляр UIImagePickerController для целевого VC.

Теперь реализуйте UIImagePickerControllerDelegate метод didFinishPickingMediaWithInfo: в исходном VC и внутри этого вызова метода self performSegueWithIdentifier: sender: с идентификатором перехода, который вы недавно создали.

Конечно, вам нужно установить идентификатор для перехода и добавить UINavigationControllerDelegate, UIImagePickerControllerDelegate ссылки на протокол в исходный интерфейс заголовка VC.

Также вам может понадобиться реализовать метод prepareForSegue: в исходном VC, если вам нужно передать некоторые данные (например, информацию об изображении) в целевой VC.

person Ayan Sengupta    schedule 14.11.2013
comment
У меня нет контроллера представления, который создает экземпляр UIImagePickerController. UIImagePickerController — это первый контроллер представления моего приложения. У вас есть ссылка, которая объясняет, как мы можем получить контроллер представления, который создает экземпляр UIImagePickerController, пожалуйста? - person Arnaud; 15.11.2013
comment
Я не уверен, как вы пытаетесь добавить UIImagePickerController в раскадровку. Насколько я знаю, Xcode не позволяет вам это делать. Что касается второй части вашего запроса, вы можете добавить любой обычный UIViewController в свою раскадровку. Внутри этого VC вы можете создать экземпляр контроллера UIImagePicker, возможно, одним нажатием кнопки. И после того, как вы выбрали свое изображение / зафиксировали свое изображение, вы всегда можете выполнить необходимый переход, как я обсуждал ранее. Может быть, было бы полезно, если бы вы могли поделиться кодом. - person Ayan Sengupta; 16.11.2013
comment
У меня не так много кода, но вот что я сделал: я поместил контроллер представления в раскадровку и изменил его класс на UIImagePickerController. Это неправильный способ делать что-то? Я хотел бы, чтобы UIImagePickerController был здесь, когда мы запускаем приложение, а не после того, как мы нажимаем кнопку. - person Arnaud; 16.11.2013
comment
Я попробовал ваш метод, и он работает, но, честно говоря, я не понимаю, зачем мне нужен третий пустой контроллер представления. Как я могу сделать только с двумя моими начальными контроллерами представления, пожалуйста? - person Arnaud; 16.11.2013
comment
В порядке. Я понял. Кажется, вы хотите открыть свою камеру в первую очередь. Вы можете поддержать свой подход к изменению класса для VC из инспектора идентификации. Но я бы рекомендовал не менять его напрямую на UIImagePickerController. Скорее создайте подкласс UIImagePickerController и используйте его. Но даже этот подход работает, все равно вы получите очень уродливый и непоследовательный пользовательский интерфейс. При желании вы можете создать собственное представление и добавить его как cameraOverlayView контроллера выбора изображений. - person Ayan Sengupta; 17.11.2013
comment
Но если вы в первую очередь ищете индивидуальный, согласованный пользовательский интерфейс и хотите иметь полный контроль над ним, я бы порекомендовал вам создать обычный VC и использовать функции AVFoundation.framework. Концептуальное описание классов доступно ссылка - person Ayan Sengupta; 17.11.2013