手动(自动)Segue 不工作 - table 查看单元格
Manual (automatic) Segue not working - table view cell
我是 Xcode 的新手,我正在学习教程 here,其中介绍了如何添加手动转场。
https://github.com/AdditionAddict/learnXcode
问题:在模拟器中单击 table 单元格时,不会触发手动转场。
我试过的方法:我添加了一个手动(自动)转场,一个标识符,而教程说的是选择带有结果的单元格在从 table 视图单元格到用餐细节场景的过程中,我继续执行代码部分,但我在 prepare
中的断点仍然没有触发。
// MARK: - Navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
super.prepare(for: segue, sender: sender)
switch(segue.identifier ?? "") {
case "AddItem":
os_log("Adding a new meal", log: OSLog.default, type: .debug)
case "ShowDetail":
// set the meal for the `MealViewController` as the meal selected in the `MealTableViewController`
os_log("Show detail of a meal", log: OSLog.default, type: .debug)
guard let mealDetailViewController = segue.destination as? MealViewController else {
fatalError("Unexpected destination, \(segue.destination)")
}
guard let selectedMealCell = sender as? MealTableViewCell else {
fatalError("Unexpected sender, \(String(describing: sender))")
}
guard let indexPath = tableView.indexPath(for: selectedMealCell) else {
fatalError("The selected cell is not being displayed by the table")
}
let selectedMeal = meals[indexPath.row]
mealDetailViewController.meal = selectedMeal
default:
fatalError("Unexpected Segue Identifier")
}
}
已检查:
如果仅出于调试目的,我在 MealTableViewController.swift
中放置了以下断点,当我单击 table 单元格时没有任何反应:
override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool {
return true
}
这让我觉得 table 细胞没有注册 'selection'。
Table 查看选择 属性 是单选。
自定义 MealTableViewCell
已检查 User Interaction Enabled
。
单击大纲窗格中的 MealTableViewCell
并在实用程序窗格中选择连接检查器也会显示 segue:
Final bits: 是否仍然可以添加手动(自动)转场?
教程在存档中,我已经通过一些小的改动设法跟上了其中的大部分内容。
使用 Xcode 11.6
编辑/回答评论问题:
- 添加(自动)到手动。我的意思是本教程使用的方法从 table 细胞到膳食细节。
- table(据我所知)前面没有任何东西,例如点击手势识别器
- Plus segue 起作用并触发
prepare
不同于单击 table 单元格
问题是您不小心禁用了 table 视图 的用户交互。 (当我 运行 项目并发现我无法滚动 table 视图或单击任何星星来更改评级时,我就知道这是问题所在。)
查看此屏幕截图的底部。您需要确保像屏幕截图中那样 选中 已启用用户交互。在您的项目中,它不是。因此整个table是“不可触碰的”。
我是 Xcode 的新手,我正在学习教程 here,其中介绍了如何添加手动转场。
https://github.com/AdditionAddict/learnXcode
问题:在模拟器中单击 table 单元格时,不会触发手动转场。
我试过的方法:我添加了一个手动(自动)转场,一个标识符,而教程说的是选择带有结果的单元格在从 table 视图单元格到用餐细节场景的过程中,我继续执行代码部分,但我在 prepare
中的断点仍然没有触发。
// MARK: - Navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
super.prepare(for: segue, sender: sender)
switch(segue.identifier ?? "") {
case "AddItem":
os_log("Adding a new meal", log: OSLog.default, type: .debug)
case "ShowDetail":
// set the meal for the `MealViewController` as the meal selected in the `MealTableViewController`
os_log("Show detail of a meal", log: OSLog.default, type: .debug)
guard let mealDetailViewController = segue.destination as? MealViewController else {
fatalError("Unexpected destination, \(segue.destination)")
}
guard let selectedMealCell = sender as? MealTableViewCell else {
fatalError("Unexpected sender, \(String(describing: sender))")
}
guard let indexPath = tableView.indexPath(for: selectedMealCell) else {
fatalError("The selected cell is not being displayed by the table")
}
let selectedMeal = meals[indexPath.row]
mealDetailViewController.meal = selectedMeal
default:
fatalError("Unexpected Segue Identifier")
}
}
已检查:
如果仅出于调试目的,我在 MealTableViewController.swift
中放置了以下断点,当我单击 table 单元格时没有任何反应:
override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool {
return true
}
这让我觉得 table 细胞没有注册 'selection'。
Table 查看选择 属性 是单选。
自定义 MealTableViewCell
已检查 User Interaction Enabled
。
单击大纲窗格中的 MealTableViewCell
并在实用程序窗格中选择连接检查器也会显示 segue:
Final bits: 是否仍然可以添加手动(自动)转场?
教程在存档中,我已经通过一些小的改动设法跟上了其中的大部分内容。
使用 Xcode 11.6
编辑/回答评论问题:
- 添加(自动)到手动。我的意思是本教程使用的方法从 table 细胞到膳食细节。
- table(据我所知)前面没有任何东西,例如点击手势识别器
- Plus segue 起作用并触发
prepare
不同于单击 table 单元格
问题是您不小心禁用了 table 视图 的用户交互。 (当我 运行 项目并发现我无法滚动 table 视图或单击任何星星来更改评级时,我就知道这是问题所在。)
查看此屏幕截图的底部。您需要确保像屏幕截图中那样 选中 已启用用户交互。在您的项目中,它不是。因此整个table是“不可触碰的”。