简体   繁体   中英

how to show viewcontroller: UIImagePickController and dismiss it (Swift)

i got this uiactionsheet which loads uipickerviewcontroller its in a viewcontroller thats in a UISplitViewController

It's a UIsplitviewcontroller, this code is on a detailview, the detailview is called from masterview

how ever, when i try to load it "click it" it gives me a warning and doesnt go any further

   func actionSheet(actionSheet: UIActionSheet!, clickedButtonAtIndex buttonIndex: Int){
    var imagePicker = UIImagePickerController()
    imagePicker.delegate = self

    switch buttonIndex{

    case 0:
        imagePicker.sourceType = UIImagePickerControllerSourceType.SavedPhotosAlbum
        imagePicker.allowsEditing = true
        imagePicker.delegate = self
        NSLog("Vælg fra Biblioteket");
        break;
    case 1:
        imagePicker.sourceType = UIImagePickerControllerSourceType.Camera
        imagePicker.allowsEditing = true
        imagePicker.delegate = self
        NSLog("Vælg Kamera");
        break;
    default:
        NSLog("Default");
        break;
    }
    self.presentViewController(imagePicker, animated: true, completion: nil) // this is the problem 
}

the warning is this : Warning: Attempt to present on which is already presenting (null)

how ever if i use this : self.showDeatilViewController(imagePicker, true) it show up but then i can't dismiss it at all

here's how i thought it would be dismissed

    func imagePickerControllerDidCancel(picker: UIImagePickerController) {

    picker.dismissViewControllerAnimated(true, completion: nil)
}

If i run this code in viewDidLoad, it works

        var imagePickerController = UIImagePickerController()
    imagePickerController.delegate = self
    imagePickerController.sourceType = UIImagePickerControllerSourceType.SavedPhotosAlbum
    imagePickerController.allowsEditing = true
    self.presentViewController(imagePickerController, animated: true, completion: { imageP in

    })

I figured out that if i write this :

        self.presentedViewController?.presentViewController(imagePicker, animated: true, completion: nil)

it shows and closes ?!?!

I've got it working... someone brought to my attention that 8.0 IOS has a bug with opening the photolibery and such from apps.. so i put it in the main queue like this

dispatch_async(dispatch_get_main_queue()){
        imagePicker.delegate = self
        self.presentViewController(imagePicker, animated: true, completion: nil)
    }

and now it works!

little delay but it works

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM