web-dev-qa-db-fra.com

Comment ajouter un contrôleur de navigation par programme dans le code mais pas en tant que contrôleur de vue initial

Je suis relativement nouveau pour Swift et iOS) et je ne trouve pas de réponse ni d’aide pour mon problème qui fonctionne.

Je souhaite créer une vue du contrôleur de navigation lorsque je clique sur un bouton de ma vue précédente. Ma vue précédente est une intégration avec un bouton sur la dernière page. J'ai correctement connecté le bouton à ma vue suivante, mais je ne parviens pas à faire en sorte que la vue se comporte comme un contrôleur de navigation. Par exemple, lorsqu'une barre de navigation est affichée, je ne peux pas y ajouter d'éléments de navigation.

Existe-t-il un moyen de définir la nouvelle vue que je crée en cliquant sur mon bouton dans la première vue en tant que contrôleur racine pour ma vue de navigation?

Une version courte de mon code:

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let button = UIButton(frame: CGRect(x: view.frame.width / 2, y: view.frame.height / 2, width: 40, height: 40))
        button.backgroundColor = .red
        button.tintColor = .white
        button.setTitle("Test", for: .normal)
        button.addTarget(self, action: #selector(change), for: .touchUpInside)
        view.addSubview(button)
    }

    func change () {
        let otherView = SecondViewController()
        self.present(otherView, animated: true, completion: nil)
    }

}

class SecondViewController: UINavigationController {

    override func viewDidLoad() {
        super.viewDidLoad()

        view.backgroundColor = .yellow
    }

}

Le SecondViewController s’affiche avec une barre de navigation, mais j’ai eu des problèmes lors de la mise en œuvre des éléments de navigation, car ils n’étaient pas affichés.

Le deuxième contrôleur de vue que je présente doit-il être de type UIViewController ou UINavigationController?

Je suis conscient qu'il existe des moyens plus faciles d'atteindre mon objectif avec l'utilisation du storyboard mais, à mon avis, je le comprends mieux en faisant mes propres références via du code au lieu de les créer en les faisant glisser hors du storyboard.

Edit: Je n'ai pas de formation Objective-C et j'apprends Swift depuis environ 4 semaines maintenant.

14
iOS-Trainee

Vous pouvez ajouter UINavigationController comme ci-dessous:

Vous devez d’abord créer un objet de SecondViewController,

let objVC: SecondViewController? = storyboard?.instantiateViewController(withIdentifier: "SecondViewController")

Ou

let objVC: SecondViewController? = SecondViewController(nibName: "SecondViewController", bundle: nil)

Ou

let objVC: SecondViewController? = SecondViewController()

Ajoutez ensuite Navigation à SecondViewController

let aObjNavi = UINavigationController(rootViewController: objVC!)

Si vous souhaitez présenter, utilisez:

self.present(aObjNavi, animated: true) { 
}

Si vous voulez pousser alors utilisez:

self.navigationController?.pushViewController(aObjNavi, animated: true)

Si vous souhaitez définir en tant que contrôleur racine, utilisez:

let appDelegate: AppDelegate = (UIApplication.shared.delegate as? AppDelegate)!
appDelegate.window?.rootViewController = aObjNavi
44
VRAwesome
var objVC: UIViewController? = storyboard.instantiateViewController(withIdentifier: "ViewController")

var aObjNavi = UINavigationController(rootViewController: objVC)

Maintenant, au lieu d'utiliser l'objet contrôleur de vue, utilisez l'objet contrôleur de navigation.

1
Arpit Jain