2016-04-18 4 views
0

Я отклоняя мою UIImagePicker с помощью:Отклонив в UIImagePicker

func imagePickerControllerDidCancel(picker: UIImagePickerController!) 
    { 
     picker.dismissViewControllerAnimated(true, completion: nil) 
    } 

К сожалению, это также отклоняя вид снизу. Я не хочу, чтобы это произошло.

Я загрузил UIImagePicker так:

let imagePicker: UIImagePickerController! = UIImagePickerController() 


@IBAction func uploadFromAlbumButton(sender : UIButton){ 
    let picker = UIImagePickerController() 
    picker.allowsEditing = true 
    picker.delegate = self 
    presentViewController(picker, animated: true, completion: nil) 
} 

Вид снизу UIImagePicker получает показано, как это:

let newViewController = FulfilWishViewController(); 
newViewController.delegate = self 
navigationController?.pushViewController(newViewController, animated: true)  
+1

Не могли бы вы рассказать нам, как вы показываете вид под ImagePicker ? –

+1

Итак, у вас есть SomeParentViewController, который показывает FulfilWishViewController. Затем FulfilWishViewController вызывает ImagePicker. Когда ImagePicker вызывает imagePickerControllerDidCancel, он отклоняет себя ** и ** FulfilWishViewController. Таким образом, вы показываете только SomeParentViewController. Справа? –

+0

Да, я хочу, чтобы он остался на FulfilWishViewController вместо того, чтобы возвращаться к SomeParentViewController –

ответ

0

Пожалуйста, проверьте, если вы сделали какой-либо код в viewwillappear(). Потому что после отклонения UIImagepickerController он вызывает viewwillappear() родительского контроллера.

+0

У меня нет кода в viewWillAppear() –

0

Насколько я понял, вы должны иметь следующую структуру: Storyboard Кроме того, SecondViewController должен иметь раскадровки ID enter image description here

Ваш ViewController.swift:

class ViewController: UIViewController, UINavigationControllerDelegate { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    @IBAction func didTapBtn1(sender: AnyObject) { 
     let storyboard = UIStoryboard(name: "Main", bundle: nil) 
     let secondViewController = storyboard.instantiateViewControllerWithIdentifier("SecondViewController") 
     self.navigationController?.pushViewController(secondViewController, animated: true) 
    } 
} 

SecondViewController.swift:

class SecondViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    @IBAction func didTapBtn2(sender: AnyObject) { 
     let picker = UIImagePickerController() 
     picker.allowsEditing = true 
     picker.delegate = self 
     presentViewController(picker, animated: true, completion: nil) 
    } 

    func imagePickerControllerDidCancel(picker: UIImagePickerController) { 
     picker.dismissViewControllerAnimated(true, completion: nil) 
    } 
} 

Этот код был протестирован. Я думаю, проблема в вызове SecondViewController.

UPDATE:

Если вы используете XIB, так вы называете SecondViewcontroller через:

@IBAction func didTapBtn1(sender: AnyObject) { 
    let secondViewController = SecondViewController(nibName: "SecondViewController", bundle: nil) 
    self.navigationController?.pushViewController(secondViewController, animated: true) 
} 

в вашем ParentViewController

+0

Спасибо за хорошо проработанное объяснение. Однако я не использую раскадровки. Я использую отдельные .Xib-файлы. Как мне решить эту проблему создания экземпляров в этом случае? –

+0

Нет, к сожалению, это не меняет способ отмены кнопки отмены на UIImagePicker. –

+0

Возможно, есть еще одна информация, на самом деле есть один UITabBarController, который имеет 4 элемента, каждый из которых становится UINavigationControllers при нажатии так: let item1 = UINavigationController (rootViewController: NewsFeedViewController (nibName: «NewsFeedView», bundle: nil)) –