Afficher une Modal View

Bonsoir à  tous,


 


Comment vous procédez pour afficher une vue en mode modale comme on peut voir sur cette image :


 


https://i.stack.imgur.com/yncY5.png


 


image récupérée sur Stackoverflow.


 


Merci.


Réponses

  • CéroceCéroce Membre, Modérateur
    Pour afficher un view controller en modal, il faut que ce soit un UIViewController "parent" qui demande son affichage par la méthode present(). Il faudra appeler dismiss() pour le retirer.

    Dans l'exemple que tu donnes, la barre avec le bouton de fermeture est sans doute un UINavigationController. C'est lui qu'il faudra présenter.
  • merci, alors j'ai ce code pour afficher la view en modal :



    @IBAction func openView(_ sender: Any) {

    let vc = (
    storyboard?.instantiateViewController(
    withIdentifier: "ViewModal")
    )!
    vc.view.backgroundColor = UIColor.groupTableViewBackground
    // vc.modalTransitionStyle = .coverVertical
    vc.modalPresentationStyle = .overCurrentContext
    present(vc, animated: true, completion: nil)


    }

    le souci c'est que malgré le fait d'avoir paramétré la vue en FreeForm, lorsqu'elle s'affiche c'est sur l'ensemble de l'écran alors que j'ai paramétré dans size :


    width = 325 et height = 400


  • Joanna CarterJoanna Carter Membre, Modérateur

    Il faut enquêter sur les popovers  :-*  


  • Merci à  tous,


    effectivement l'utilisation d'un popover me donne ce que je souhaite :



    let popoverContent = (self.storyboard?.instantiateViewController(withIdentifier: "ViewModal"))! as UIViewController
    let nav = UINavigationController(rootViewController: popoverContent)
    nav.modalPresentationStyle = UIModalPresentationStyle.popover

    nav.preferredContentSize = CGSize(width: 300, height: 300)

    let popover = nav.popoverPresentationController
    popover?.permittedArrowDirections = UIPopoverArrowDirection.init(rawValue: 0)

    popover?.delegate = self
    popover?.sourceView = self.view
    popover?.sourceRect = CGRect(x: 150, y: 200, width: 0, height: 0)

    self.present(nav, animated: true, completion: nil)
  • heliohelio Membre
    janvier 2017 modifié #6

    Bonsoir,


    Une question à  propos des popovers, 


    comment faire pour que le popover ne soit pas caché si l'utilisateur clique à  l'extérieur.


     


    apparemment avant iOS 9 on pouvait utiliser la méthode :



    popoverControllerShouldDismissPopover 

    en swift 3 et iOS 10, quelle est désormais la méthode ?


     


    Merci.




  • Bonsoir,


    Une question à  propos des popovers, 


    comment faire pour que le popover ne soit pas caché si l'utilisateur clique à  l'extérieur.


     


    apparemment avant iOS 9 on pouvait utiliser la méthode :



    popoverControllerShouldDismissPopover 

    en swift 3 et iOS 10, quelle est désormais la méthode ?


     


    Merci.




    C'est le fonctionnement normal d'un popover...


    Dans ton cas, il serait donc plus normal d'utiliser une alerte qui va en plus griser le fond.

  • OK merci Eric, je vais étudier cela.


    En revanche si je rajoute le code suivant :




    if let pop = nav.popoverPresentationController {
    nav.isModalInPopover = true
    delay(0.1) {
    pop.passthroughViews = nil
    }
    }


    cela fait ce que je souhaite.


Connectez-vous ou Inscrivez-vous pour répondre.