2016-07-03 3 views
5

Я работаю над проектом, который использует систему вкладок. Одним из элементов вкладки является JobPostingViewController. Я вставляю его в UINavigationController. Существует UIButton, называемый добавлением нового задания в этот контроллер представления. Я реализовал pushviewcontroller, чтобы перейти CreateJobPostViewController. Там я должен добавить UIImagePickerController для выбора изображения. Когда я нажимаю кнопку «Готово» или выбираю изображение из библиотеки, он отклоняется на JobPostingViewController. Но он должен перейти к CreateJobPostViewController. Любой, пожалуйста, помогите мне. Заранее спасибо.Увольнение UIImagePickerController также отклоняет представление диспетчера представлений

You can see the issue from this link

код в JobPostingViewController

@IBAction func openCreateJob(sender: AnyObject) { 
    let vc = self.storyboard?.instantiateViewControllerWithIdentifier("CreateJobPostViewController") as! CreateJobPostViewController 
    self.navigationController?.pushViewController(vc, animated: true) 
} 

код в CreateJobPostViewController

@IBAction func addImages(sender: AnyObject) { 
    imagePicker.allowsEditing = false 
    imagePicker.sourceType = .PhotoLibrary 
    presentViewController(imagePicker, animated: true, completion: nil) 
} 
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) { 
    picker.dismissViewControllerAnimated(true, completion: nil) 
} 
func imagePickerControllerDidCancel(picker: UIImagePickerController) { 
    picker.dismissViewControllerAnimated(true, completion: nil) 
} 
+0

Я никогда не видел эту проблему раньше. 'imagePicker', похоже, уже определен до вызова' addImages'. Зачем? что используется где-то еще? Есть ли другой код, работающий одновременно? Кроме того, вы вызываете 'picker.dismissViewControllerAnimated', вы должны попросить родителя (presentingViewController) отклонить модальный контроллер (т. Е.' Self.dismissViewControllerAnimated'), не сообщать представленному, чтобы его отклонить. –

+0

Это не делает другого смысла, определяющего imagePicker как глобальную переменную. Он нигде не используется. Я попробовал оба варианта, которые вы предлагаете отклонить. Я устал находить решение, и я использую другой путь. Благодарим за ваше предложение. @ Simon McLoughlin – sant05

+0

Можете ли вы разместить больше кода или объяснить макет приложения больше. Есть много людей, освещающих различные подобные проблемы и решения. Является ли представление JobPostingViewController контейнером? или внутри контейнера? Как открывается этот экран? когда сборщик уволен, он вызывает методы 'viewWillAppear' /' viewDidAppear', 'viewDidLayoutSubviews' на' CreateJobPostViewController'. Вы делаете что-нибудь внутри этих методов? –

ответ

4

Добавление Picker, как подвид

пытаются добавить imagepicker как подтаблицы к вашему CreateJobPostViewController InstEd представления, а затем удалить его из родителей в delegtes

@IBAction func openCreateJob(sender: AnyObject) { 

var picker: UIImagePickerController = UIImagePickerController() 
picker.delegate = self 
picker.allowsEditing = false 
picker.sourceType = .PhotoLibrary 
self.addChildViewController(picker) 
picker.didMoveToParentViewController(self) 
self.view!.addSubview(picker.view!) 
} 

, а затем

func imagePickerControllerDidCancel(picker: UIImagePickerController) { 

    picker.view!.removeFromSuperview() 
    picker.removeFromParentViewController() 
    } 

Для представления

показывает сборщик по текущему контексту с параметрами, например, отменяет отмену,

использование picker.modalPresentationStyle = .overCurrentContext // перед представлением он

presentViewController(picker, animated: true, completion: nil) 
+0

wow большое вам спасибо :) – sant05

+0

Я хочу показать сборщик над панелью навигации и панель вкладок, что означает весь экран. Не могли бы вы мне помочь? – sant05

+0

Вы можете сделать это, добавив свой контроллер выбора в качестве подзаголовка self.navigationcontroller, например [self.navigationController.view addSubview: picker] на – AnshaD

8

Исправлена ​​ошибка, установив modalPresentationStyle початкоотделяющем изображения к "OverCurrentContext":

picker.modalPresentationStyle = .overCurrentContext 
+1

Это действительно исправило это для меня. Метод viewWillDisappear больше не вызывался на исходный контроллер представления. – Alex

+1

Это правильный способ сделать это. Принятый ответ - Хакки. – Basanth

3

Вы могли бы использовать:

picker.modalPresentationStyle = .overCurrentContext 

, но в зависимости от вашего экрана макет, может быть лучше использовать:

picker.modalPresentationStyle = .overFullScreen 

иначе ваш «отменить», «пересдать» и «использовать фотографию» кнопки могут быть не видны.

0

У меня была такая же проблема, я решил ее использовать раскадровку (Xcode v9.2)

1 - Перейти к раскадровке, где находится ваш ViewController, выберите его

Select ViewController

2 - Установить презентации, как: Текущий контекст

Set current context

Примечание: Если это не работает Текущий контекст, выберите «За текущий контекст»

Смежные вопросы