私はSwiftを使ってiOSアプリケーションを開発しています。セルビューを表示するには、セル行を選択するか、そのセル行のコンテンツビュー内のボタンを選択してください。テーブルビューを含む元のビューコントローラは、2つの異なる場合にセグを実行します:セル行自体が選択されたとき(seplayerがavplayerviewcontrollerになり、選択されたセル行に応じてビデオを再生する)、セグテーブルビューセルのコンテンツビューの内側にあるボタンを押します。最初のsegueでは、最初のsegueをオーバーライドするときにif let indexPath = self.tableview.indexPathForSelectedRow
で選択されたセル行を渡すことができます。しかし、ボタンを押したときに起こる2番目のセグを無効にしようとすると、選択されたセル行を渡そうとすると機能しません。これは、テーブルビューセル内のボタンが選択された行を知らないためですか?もしそうなら、私はこの問題をどのように解決できますか?そのような問題を解決する実行可能な解決策は何ですか?注意:セル行を選択すると「playDrill」セグがトリガーされ、同じセル行のコンテンツビュー内のボタンを選択すると「ヒント」セグがトリグになりますセグのテーブルビューのセル行を選択するには?
最初のセグのコードは、セル行(このセグエ機能、必要に応じて):
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()
}
コードあなたはセルのコンテンツビュー内のボタンを選択したときに(私はこのセグエは、最初のセグエのようにindexPath
の値を持つようにしたいトリガー秒セグエのためのしかし、そのコードを使用しようとすると正しい値が返されません)。
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
}
}
}
}
に私はそんなに書くことによって、あなたの質問をした考え方より多くの混乱、それがなければならないよりも思えます。ボタンのIBActionのコードはどこですか? – Shades