2016-05-22 18 views
6

Attualmente sto creando un'app con una visualizzazione modale che contiene un WkWebView. Quando voglio caricare un'immagine all'interno di questa vista modale e viene visualizzata la selezione delle foto, la vista modale torna semplicemente al controller della vista che lo ha attivato.La vista modale si chiude quando si seleziona un'immagine in WkWebView iOS

Come posso impedirlo?

import UIKit 

class PostWindow : UIViewController { 

@IBAction func close(sender: AnyObject) { 
    dismissViewControllerAnimated(true, completion: nil) 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // do stuff here 
    let myWebView:UIWebView = UIWebView(frame: CGRectMake(0, 70, UIScreen.mainScreen().bounds.width, UIScreen.mainScreen().bounds.height)) 
    myWebView.loadRequest(NSURLRequest(URL: NSURL(string: "https://m.facebook.com/")!)) 
    self.view.addSubview(myWebView) 

    self.title = "News Feed" 

    UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.Default, animated: true) 
    UIApplication.sharedApplication().statusBarHidden = false 

    /*let addButton: UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Search, 
    target: self, 
    action: #selector(self.openSearch(_:))) 
    self.navigationItem.setRightBarButtonItems([addButton], animated: true)*/ 
    self.navigationController?.navigationBar.tintColor = UIColor.blackColor() 
} 

override func preferredStatusBarStyle() -> UIStatusBarStyle { 
    return UIStatusBarStyle.LightContent 
} 

}

Grazie!

risposta

9

Ho riscontrato lo stesso problema. Ho scoperto che il foglio di azione per il caricamento dei file prova a chiudersi due volte dopo aver selezionato un'opzione, il che comporta la rimozione della modale.

Una soluzione è quella di sottoclasse il UINavigationController contenente la WebView e sovrascrivere dismissViewControllerAnimated di ignorarlo meno che non sia in realtà un presentedViewController.

Come così:

override func dismissViewControllerAnimated(flag: Bool, completion: (() -> Void)?) { 
    if (self.presentedViewController != nil) { 
     super.dismissViewControllerAnimated(flag, completion: completion) 
    } 
} 

Se non si utilizza un controller di navigazione, basta ignorare questo metodo in WebView, invece.

0

Funziona anche per i non navigationController/ViewController solo in questo modo:

override func dismiss(animated flag: Bool, completion: (() -> Void)? = nil){ 
    if(self.presentedViewController != nil) 
    { 
     super.dismiss(animated: flag, completion: completion) 
    } 
}