web-dev-qa-db-fra.com

Présentation d'un contrôleur de vue avec un bouton dans un UITableViewCell par programme (Swift)

J'essaie de faire en sorte que lorsqu'un utilisateur clique sur une cellule de vue de tableau dans ma vue de tableau, elle le dirige vers un nouveau contrôleur de vue. Plus précisément, lorsqu'un utilisateur clique sur le nom d'utilisateur d'une personne, il doit le transférer dans son profil. le nom d'utilisateur étant la cellule de la vue table et le profil étant le nouveau contrôleur de vue. Je pensais que la manière de faire était d'utiliser ".presentViewController (vc, animé: true, complétion: nil), mais lorsque je le fais, il est indiqué que" myCell n'a pas de membre nommé .presentViewController "Below is a screenshot of the issue

Si quelqu'un pouvait m'aider à résoudre ce problème, il serait grandement apprécié.

12
Ronald Jones

presentViewController:animated:completion est une méthode d'instance de UIViewController pas UIView ou d'une sous-classe de. Vous pouvez essayer ceci:

self.window?.rootViewController.presentViewController(specificViewController, animated: true, completion: nil)

Cependant, je suggère que vous utilisiez la méthode presentViewController:animated:completion: de UIViewController. Un mécanisme de rappel peut être réalisé entre UIViewController et cell.

Comme ci-dessous: Obtenir le clic du bouton dans la cellule de la vue tableau de l'interface utilisateur

17
Bannings

La réponse de Banning fonctionne, mais la syntaxe est ancienne. De Swift 4 :

self.window?.rootViewController?.present(vc, animated: true, completion: nil)
6
The Doctor

Swift3 version

let storyboard = UIStoryboard(name: "MainViewController", bundle: nil)
let messagesViewController = storyboard.instantiateViewController(withIdentifier: "MessagesViewController") as! MessagesViewController
self.window?.rootViewController?.present(messagesViewController, animated: true, completion: nil)
2
Safad Funy

Si vous avez créé une classe séparée pour tableView, ce qui est une bonne pratique, vous pouvez le faire comme suit:

Commencez par créer addTarget où la cellule est créée (cellForRowAt):

cell.dropdownBtn.addTarget(self, action: #selector(self.openListPickerVC(_:)), for: .touchUpInside)

Après cela, présentez le contrôleur de vue dans openListPickerVC ():

@objc func openListPickerVC(_ sender: UIButton) {
    let index = sender.tag
    let vc: PickerViewController = UIStoryboard(name: "Main", bundle: 
             Bundle.main).instantiateViewController(withIdentifier: 
             "PickerViewController") as! PickerViewController

     self.present(vc, animated: true, completion: nil)
}
0
Ashay