web-dev-qa-db-fra.com

Comment créer une vue contextuelle personnalisée avec Swift?

Je travaille donc sur une application simple, où j'utilise une vue de table. Cette vue de table affiche le nom des "joueurs". Mais pour que j'ajoute des joueurs dans la vue de table, je veux qu'une fenêtre pop-up soit affichée avec un champ de texte où vous fournissez le nom.

Maintenant, j'ai lu sur la création d'un fichier xib ou nib, mais je ne sais pas comment "charger" la fenêtre contextuelle.

Quelle est la meilleure approche à ce sujet?

Ressemble à ça:

Pop up View

enter image description here

12
J Arango

vous créeriez un UIView personnalisé avec tous les objets respectés nécessaires, à partir de la vue de votre contrôleurDidLoad () vous le cacheriez.

customView.hidden = true

Chaque fois que votre utilisateur souhaite effectuer une action ou une tâche, vous l'affichez et une fois que l'utilisateur a terminé, le masquez à nouveau ou supprimer de la superView .

customView.hidden = false

Ci-dessous, il y a du code pour vous aider à démarrer

    private var customView: UIView!

    override func viewDidLoad() {
        super.viewDidLoad()
        customView.hidden = true
    }

    private func loadCustomViewIntoController() {
         let customViewFrame = CGRect(x: 0, y: 0, witdh: view.frame.width, height: view.frame.height - 200)
         customView = UIView(frame: customViewFrame)

         view.addSubview(customView)

         customView.hidden = false

        // any other objects should be tied to this view as superView 
        // for example adding this okayButton

        let okayButtonFrame = CGRect(x: 40, y: 100, width: 50, height: 50)
        let okayButton = UIButton(frame: okayButtonFrame )

         // here we are adding the button its superView
         customView.addSubview(okayButton)

         okayButton.addTarget(self, action: #selector(self.didPressButtonFromCustomView:), forControlEvents:.TouchUpInside)

    }


    func didPressButtonFromCustomView(sender:UIButton) {
         // do whatever you want
         // make view disappears again, or remove from its superview
    }


    @IBAction func rateButton(sender:UIBarButtonItem) {
        // this barButton is located at the top of your tableview navigation bar
        // when it pressed make sure you remove any other activities that were on the screen, for example dismiss a keyboard 

          loadCustomViewIntoController()
    }

Découvrez-le projet github , il est fermé pour être prêt pour la production, il vous donne une meilleure façon de traiter (présenter et rejeter) avec UIViews

Si vous ne voulez que le nom du joueur, utilisez un UIAlertController contenant un champ de texte

15
Lamar

Dans le storyboard

  • Dans le storyboard, créez un UIViewController et concevez-le selon vos besoins.
  • Définissez la classe personnalisée en tant qu'autreViewController et Storyboard_ID en tant qu'autre_view_sid
  • Créez une nouvelle classe Cocoa Touch en tant qu'autre ViewController et sous-classe de UIVIewController

Dans viewController

    let popvc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "another_view_sid") as! anotherViewController

    self.addChildViewController(popvc)

    popvc.view.frame = self.view.frame

    self.view.addSubview(popvc.view)

    popvc.didMove(toParentViewController: self)

Dans un autreViewController

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

@IBAction func Close_popupView(_ sender: Any) {
    removeAnimate()
}

func showAnimate()
{
    self.view.transform = CGAffineTransform(scaleX: 1.3, y: 1.3)
    self.view.alpha = 0.0
    UIView.animate(withDuration: 0.25, animations: {
        self.view.alpha = 1.0
        self.view.transform = CGAffineTransform(scaleX: 1.0, y: 1.0)
    })
}

func removeAnimate()
{
    UIView.animate(withDuration: 0.25, animations: {
        self.view.transform = CGAffineTransform(scaleX: 1.3, y: 1.3)
        self.view.alpha = 0.0
    }, completion: {(finished : Bool) in
        if(finished)
        {
            self.willMove(toParentViewController: nil)
            self.view.removeFromSuperview()
            self.removeFromParentViewController()
        }
    })
}
18
Mili Shah

Cet EzPopup tiers ( https://github.com/huynguyencong/EzPopup ) peut vous aider à l'afficher. Concevez simplement votre popup dans le storyboard, puis lancez-le.

// init YourViewController
let contentVC = ...

// Init popup view controller with content is your content view controller
let popupVC = PopupViewController(contentController: contentVC, popupWidth: 100, popupHeight: 200)

// show it by call present(_ , animated:) method from a current UIViewController
present(popupVC, animated: true)
1
huync