web-dev-qa-db-fra.com

Ajouter un bouton "Terminé" pour ignorer un UIViewController créé par programme

Je suis un débutant de Swift et j'ai créé une application de démonstration contenant un UIViewController et un UITableViewController dans le Storyboard. UIViewController a une vue Collection et un contrôleur de navigation intégré. Lorsque vous appuyez sur une cellule de vue de collection, l'application passe à UITableViewController. Je peux également revenir à mon UIViewController à partir de UITableViewController. Tout cela fonctionne bien. Maintenant, certaines des lignes de mon UITableViewController ont des URL. En tapant sur une URL, je crée par programmation une vue Web à l'intérieur d'un UIviewcontroller et récupère l'URL à charger. Le problème est que je ne peux pas ignorer la vue Web et revenir à mon UITableViewController après cela. C'est le code que j'ai dans ma classe UITableViewController:

// When user taps a row, get the URL and load it in a webview
let mywebViewController = UIViewController()
let webView = UIWebView(frame: mywebViewController.view.bounds)
webView.loadRequest(NSURLRequest(URL: url)) // url from the row a user taps
mywebViewController.view = webView
self.navigationController!.presentViewController(mywebViewController, animated: true, completion: nil)

Comment puis-je ajouter un bouton Terminé à ce UIviewcontroller créé par programme pour fermer la vue Web et revenir à mon UITableViewController

11
smokinguns

Vous pouvez envelopper la mywebViewController dans une UINavigationController, puis définir la rightBarButtonItem à UIBarButtonItem(barButtonSystemItem: .Done, target: self, action: "dismiss") comme ceci:

let navController = UINavigationController(rootViewController: mywebViewController)
mywebViewController.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .Done, target: self, action: "dismiss")

self.navigationController!.presentViewController(navController, animated: true, completion: nil)

et ajoutez une fonction dismiss dans votre UITableViewController:

func dismiss() {
    self.dismissViewControllerAnimated(true, completion: nil)
}
21
Bannings

Vous pouvez faire une chose.

Lorsque vous poussez votre mywebViewController dans le contrôleur de navigation, rendez la barre de navigation visible.

En appuyant simplement sur le bouton Précédent dans la barre de navigation, vous pouvez facilement ignorer votre mywebViewController.

J'espère que cela vous aide. :)

0
i 4322946

Ajoutez le bouton done (Terminé) à votre ViewController présenté et effectuez une action correspondante. Pour fermer ViewController, essayez ceci: 

self.dismissViewControllerAnimated(true, completion: nil)
0
AaoIi

Bouton Ajouter dans mywebViewController et dans son @IBAction, appelez 

self.dismissViewControllerAnimated(true, completion: nil)
0
Ankit Thakur