2017-08-31 57 views
0

我试图将一个原型单元格连接到两个不同的segue路径,每个路径导致另一个视图控制器。我在另一篇文章中读到,连接segues必须从源视图控制器本身到目标视图控制器,而不是视图控制器的原型单元。在Swift中有两个不同分段的原型单元格

我的源视图控制器被称为BuildsViewController,它被填充tableview单元格。我正在开发一个应用程序,在该应用程序中,单击单元格将根据是否在根视图控制器上单击登录或访客按钮来打开目标视图控制器。 (buttonClicked是一个实例变量,用于存储用户在根视图控制器上单击的按钮)。

但是,当我单击BuildsViewController上的单元格时,没有任何反应。我哪里做错了?请注意,登录按钮具有标签0,而访客按钮具有标签1.

 func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    switch self.buttonClicked?.tag { 
    case 0?: 
      performSegue(withIdentifier: "showLogin", sender: self) 
      break; 
    case 1?: 
      performSegue(withIdentifier: "showGuest", sender: self) 
      break; 

    default: 
     preconditionFailure() 
    } 
} 



    override func prepare (for segue: UIStoryboardSegue, sender: Any?) { 


    switch segue.identifier { 
    case "showLogin"?: 

     if let row = self.tableView.indexPathForSelectedRow?.row { 

      let build = self.buildStore.allBuilds [row] 
      let detailBuildsViewController = segue.destination as! BuildDetailViewController 
       detailBuildsViewController.build = build 
      break; 
     } 
    case "showGuest"?: 


     if let row = self.tableView.indexPathForSelectedRow?.row { 

      let build = self.buildStore.allBuilds [row] 
       let detailBuildsViewControllerGuest = segue.destination as! BuildDetailViewControllerGuest 
       detailBuildsViewControllerGuest.build = build 
      break; 
     } 
    default: 
     preconditionFailure("Unexpected segue identifier") 
     } 
    } 
    override func tableView (_ tableView: UITableView, 
         cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCell(withIdentifier: "UITableViewCell", for: indexPath) 
    let build = buildStore.allBuilds [indexPath.row] 
    cell.textLabel?.text = build.name 

    return cell 

} 

谢谢!

+0

显示你的'cellForRowAt'代码 –

+0

你didselect方法被调用? – luckyShubhra

+0

哦,没错。我需要重写didselect方法,并且方法签名是错误的。我现在修好了。它的作品非常漂亮!谢谢! @luckyShubhra –

回答

0

Swift 3修改了didSelectRowAtIndexPath方法的签名。您需要向方法名称添加重写以覆盖超类方法。

替换:

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

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
相关问题