从tableviewcell获取单元格索引

时间:2016-12-31 15:20:55

标签: swift firebase firebase-realtime-database

嘿,我有这个tableview控制器,可以从我的数据库中列出餐馆。我想要做的是如果选择单元格/行,它会打开一个关于餐厅的更详细的页面。出于某种原因,我无法检索索引或者它不会转到func tableView(tableView:UITableView,didSelectRowAtIndexPath indexPath:NSIndexPath)给我索引,这就是我所拥有的:

function ChecktheInput() {
// your validation code
}

3 个答案:

答案 0 :(得分:0)

您必须使用此功能来获取索引

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
{           
           print(indexPath.row)        
}

它会给你索引。

答案 1 :(得分:0)

我这样做,没有segue:

func showRestaurantViewControllerWith(_ id: String) {
    let storyBoard = UIStoryboard(name: "RestaurantCard", bundle: nil)
    let destinationVC = storyBoard.instantiateViewController(withIdentifier: "RestaurantCard") as! RestaurantCardViewController
    destinationVC.restaurant.id = id
    self.navigationController?.pushViewController(destinationVC, animated: true)
}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    self.showRestaurantViewControllerWith(self.allRestaurants[indexPath.row].id)
}

答案 2 :(得分:0)

首先,你的代码显然是Swift 3,因此didSelectRowAt的签名是错误的。

另一种解决方案是将索引路径作为sender

传递
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    print("Row \(indexPath.row)selected")
    performSegue(withIdentifier: "RestaurantDetailView", sender: indexPath)
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
   if segue.identifier == "RestaurantDetailView" {
      let indexPath = sender as! IndexPath
      let restaurant = restaurantArray[indexPath.row]
      let resName = restaurant.name
      print(resName!)
      let vc = segue.destination as! RestaurantDetailViewController
      vc.resNam = resName  
   }
}

或者更容易将segue连接到表格视图单元格。然后,您可以删除didSelectRow...,因为直接调用了prepare(for,并且该单元格作为sender参数传递。

PS:为什么属性name是可选的?在现实生活中你有没有听说过没有名字的餐馆?