Ios – How to use modal views in swift


When adding an account to Mail (in preferences), you get a modal view, like this:
Example Image, source:

My question is, how do I replicate this programatically? In other words, how do I display a modal UIView over a presenting view?

Here's what I have:

import UIKit

class ViewController: UIViewController {

@IBAction func addCard(sender: AnyObject) {
    var addContact : secondViewController = secondViewController()
    self.modalTransitionStyle = UIModalTransitionStyle.FlipHorizontal 
    self.modalPresentationStyle = .CurrentContext // Display on top of current UIView
    self.presentViewController(addContact, animated: true, completion: nil)
//Code goes on to do other unrelated things

Also, I've done the following:

  1. Created the View Controller in Interface builder.
  2. Connected the BarButtonItem "add contact" to the viewcontroller, by control-clicking, dragging to the viewcontroller of the view I want to display, and selecting "modal" in the drop down.
  3. Set the Class and StoryBoard UI of the presented Viewcontroller to secondViewController.

The expected behavior is that, when the UIBarButton "Add Contact" (which successfully triggers @IBAction func addCard(sender: AnyObject) in the code above) is pressed, secondViewController is presented as a modal view above the main view.

When I run the code above, I get the error "Use of undeclared type secondViewController"

What am I doing wrong?

NOTE: This is a re-ask of an earlier question in which I asked a similar, but slightly different question. I checked on meta, and I think it is OK – I don't want to invalidate the answers on the original question, as this is asking something slightly different. Also, in case it helps, I found some similar questions – in obj C. How do I do that in swift?

Best Solution

Try this :)

@IBAction func addCard(sender: AnyObject) {
        self.modalTransitionStyle = UIModalTransitionStyle.coverVertical 
        // Cover Vertical is necessary for CurrentContext 
        self.modalPresentationStyle = .currentContext 
        // Display on top of    current UIView
        self.present(secondViewController(), animated: true, completion: nil)
Related Question