web-dev-qa-db-fra.com

Rendre le titre de la barre de navigation cliquable rapide

J'aimerais que le titre navigationbar soit cliquable. Lorsque l'utilisateur clique dessus, il devrait effectuer une transition. Mais je ne sais pas comment faire ça.

J'ai essayé ce qui suit pour obtenir le titre et lui appliquer le geste de toucher.

var subviews  = self.navigationController?.navigationBar.subviews
        if let subviews = subviews {
            // Better check for array length before accessing to the 1st element
            var subview = subviews [0]
        }

mais sa me donne l'erreur Variable subview inferred to have type AvyObject, which may be unexpected

17
Atif Farrukh

Une autre approche consiste à ajouter un bouton comme titre du contrôleur de navigation.

Vous devez définir la vue titre de l'élément de navigation sur votre objet bouton.

Créer un objet bouton dans la méthode viewDidLoad():

Swift 4.0 Edit

let button =  UIButton(type: .custom)
button.frame = CGRect(x: 0, y: 0, width: 100, height: 40)
button.backgroundColor = .red
button.setTitle("Button", for: .normal)
button.addTarget(self, action: #selector(clickOnButton), for: .touchUpInside)
navigationItem.titleView = button

Ici, vous pouvez voir que dans la dernière ligne, le bouton est directement défini sur la variable titleView de navigationItem qui ajoutera un bouton au centre de la barre de navigation.

La méthode d'action pour le bouton est ci-dessous:

@objc func clickOnButton() {
}
57
Kampai

Réponse de Kampai mise à jour pour Swift 3:

let button =  UIButton(type: .custom)
button.frame = CGRect(x: 0, y: 0, width: 100, height: 40)
button.setTitle("Button", for: .normal)
button.addTarget(self, action: #selector(self.clickOnButton), for: .touchUpInside)
self.navigationItem.titleView = button
3
hashemi

Pour vous débarrasser de cette erreur, spécifiez un type pour votre constante if let. Je vous recommanderais également de changer ce nom de constante if let puisqu'il est identique à celui déjà déclaré à la ligne précédente.

var subviews  = self.navigationController?.navigationBar.subviews
if let subviewArray:NSArray = subviews {
     // Better check for array length before accessing to the 1st element
     var subview:UILabel = subviewArray[0] // <-- If the subview's a UILabel
}
0
Lyndsey Scott