我正在使用 Swift 开发一个 iOS 应用程序,并且我有一个视图控制器,它通过选择一个单元格行或选择该单元格行的内容视图内的一个按钮来从表格视图单元格内容视图中分离出来。包含表格视图的原始视图控制器在两种不同的情况下执行转场:一个转场在选择单元格行本身时(转场到 avplayerviewcontroller 并根据所选的单元格行播放视频),第二个转场发生在您按下位于表格视图单元格的内容视图内的按钮。在第一个 segue 中,我能够传递选择的单元格行if let indexPath = self.tableview.indexPathForSelectedRow
当我覆盖第一个 segue 时。但是,当我尝试传递当我尝试覆盖按下按钮时发生的第二个 segue 时选择的单元格行时,它不起作用。这是因为表格视图单元格内的按钮不知道它是在哪一行中选择的吗?如果是这样,我该如何解决这个问题,如果不是,解决这个问题的可行解决方案是什么?提醒:当您选择单元格行时触发“playDrill”转场,当您在同一单元格行的内容视图中选择按钮时触发“提示”转场
选择单元格行时发生的第一个 segue 的代码(此 segue 可根据需要运行):
class DrillsViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "playDrill" {
if let indexPath = self.tableView.indexPathForSelectedRow {
if initialRow == 1 {
drillVid = videoURL[indexPath.row]
playerViewController = segue.destination as! PlayerController
playerViewController.player = AVPlayer(playerItem: AVPlayerItem(url: drillVid))
playerViewController.player?.play()
print(indexPath) //prints correct value which is "[0,6]"
}
if initialRow == 3 {
drillVid = videoUrl[indexPath.row]
playerViewController = segue.destination as! PlayerController
playerViewController.player = AVPlayer(playerItem: AVPlayerItem(url: drillVid))
playerViewController.player?.play()
}
当您在单元格的内容视图中选择一个按钮时触发的第二个 segue 的代码(我希望此 segue 的值与indexPath
第一个 segue 中的值相同,但是当我尝试使用该代码时,它不会返回正确的值) :
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "Tips" {
if let indexPath = self.tableview.indexPathForSelectedRow {
if initialRow == 1 {
print(indexPath) //the value printed is "6", I want "[0,6]" like the first code block
let tipVC = segue.destination as! KeysController
}
}
}
}