嘿,我有这个tableview控制器,可以从我的数据库中列出餐馆。我想要做的是如果选择单元格/行,它会打开一个关于餐厅的更详细的页面。出于某种原因,我无法检索索引或者它不会转到func tableView(tableView:UITableView,didSelectRowAtIndexPath indexPath:NSIndexPath)给我索引,这就是我所拥有的:
function ChecktheInput() {
// your validation code
}
答案 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
是可选的?在现实生活中你有没有听说过没有名字的餐馆?