通过单击表视图中的单元格 - Swift iOS打开新的视图控制器

时间:2015-06-11 06:45:28

标签: ios swift

我有以下onClick函数

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

    tableView.deselectRowAtIndexPath(indexPath, animated: true)

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

    println(meetingArray[row] as! String)

}

打印出单击的单元格上的文本。它工作正常。

我只是想知道如何设置一个可以引导您进入新视图控制器的功能

5 个答案:

答案 0 :(得分:60)

<强>编程:

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

<强>故事板:
首先,您必须为视图设置标识符。在下面的屏幕截图中,您可以看到输入标识符的位置。

screenshot

之后,您可以创建一个&#34;目的地&#34;并使用以下代码将其推送到导航控制器:

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

<强> Segue公司:
首先,您必须为您的segue设置标识符,如下所示:

segue1

segue2

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

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

编辑:针对Swift 3.x进行了更新

答案 1 :(得分:7)

在storyboard中,在Identity Inspector中设置viewController的storyboardId。

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)
}

答案 2 :(得分:3)

对于提出此问题的其他用户,如果UITableViewController中有静态单元格,则只需控制从单元格拖动到新的视图控制器。

enter image description here

如果您不需要将任何数据传递到下一个View Controller,也可以在动态单元格上执行此操作。但是,如果您确实需要传递数据,那么您应该make the segue from the Table View's view controller itself and not the cell。然后以编程方式调用segue。

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

答案 3 :(得分:1)

尝试一下,这对我有用,

   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)

    }
  }

希望这对某些人有帮助。

答案 4 :(得分:-1)

如果使用,

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

所选行的值太晚传递给另一个视图控制器。 您最好在 func prepareForSegue 中传递所选行,如下所示, 首先,声明一个全局变量,将值传递给其他 viewController

var globalVar:Int 

在基于故事板的应用程序中,您经常需要在导航之前做一些准备

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        // Get the new view controller using segue.destinationViewController.
        // Pass the selected object to the new view controller.
        let selectedIndex = self.tableView.indexPathForCell(sender as! UITableViewCell)
        globalVar = selectedIndex!.row
        print("tableView prepareForSegue: " + String(globalVar))

    }