web-dev-qa-db-fra.com

Ouvrez le nouveau contrôleur de vue en cliquant sur Cellule dans la vue tableau - Swift iOS

J'ai la fonction onClick suivante

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    tableView.deselectRowAtIndexPath(indexPath, animated: true)

    let row = indexPath.row
    println("Row: \(row)")

    println(meetingArray[row] as! String)

}

qui affiche le texte sur la cellule sur laquelle vous cliquez. Cela fonctionne bien.

Je me demande simplement comment vous définiriez une fonction qui vous dirigerait vers le nouveau contrôleur de vue

37
Greg Peckory

par programme:

let destination = UIViewController() // Your destination
navigationController?.pushViewController(destination, animated: true)

Storyboard:
Vous devez d’abord définir un identifiant pour votre vue. Dans la capture d'écran ci-dessous, vous pouvez voir où entrer l'identifiant.

screenshot

Après cela, vous pouvez créer une "destination" et l'envoyer au contrôleur de navigation à l'aide du code ci-dessous:

let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)
let destination = storyboard.instantiateViewController(withIdentifier: "YourViewController") as! YourViewController
navigationController?.pushViewController(destination, animated: true)

Segue:
Vous devez d’abord définir un identifiant pour votre segment comme indiqué ci-dessous:

segue1

segue2

performSegue(withIdentifier: "segue", sender: self)

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "segue" {
        // Setup new view controller
    }
}

EDIT: mis à jour pour Swift 3.x

60
Eendje

Dans le storyboard, définissez storyboardId de votre viewController dans l'inspecteur d'identité.

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    tableView.deselectRowAtIndexPath(indexPath, animated: true)

    let row = indexPath.row
    println("Row: \(row)")

    println(meetingArray[row] as! String)

    let secondViewController = self.storyboard.instantiateViewControllerWithIdentifier("storyBoardIdFor your new ViewController") as SecondViewController
    self.navigationController.pushViewController(secondViewController, animated: true)
}
7
Saurabh Prajapati

Pour les autres utilisateurs qui viennent à cette question, si vous avez des cellules statiques dans un UITableViewController, vous pouvez simplement contrôler le glisser de la cellule vers le nouveau contrôleur de vue.

enter image description here

Vous pouvez également le faire sur des cellules dynamiques si vous n'avez pas besoin de transmettre de données au prochain contrôleur de vue. Toutefois, si vous devez transmettre des données, vous devez séparer le contrôleur de vue de la vue tableau lui-même et non la cellule . Ensuite, appelez la segue par programmation.

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    self.performSegue(withIdentifier: "mySegueIdentifier", sender: self)
}
4
Suragch

Essayez ça ça marche pour moi,

   func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    print("You tapped cell number \(indexPath.section).")
    print("Cell cliked value is \(indexPath.row)")

    if(indexPath.row == 0)
    {
    let storyboard = UIStoryboard(name: "Main", bundle: nil)

    let controller = storyboard.instantiateViewController(withIdentifier: "LoginViewController") as! LoginViewController

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

    }
  }

J'espère que cela aidera pour quelqu'un.

1
Jaywant Khedkar