Je développe une application iOS en utilisant Swift et j'ai un contrôleur de vue qui se sépare d'une vue de contenu de cellule en sélectionnant une rangée de cellules ou en sélectionnant un bouton dans la vue de contenu de cette rangée de cellules. Le contrôleur d'affichage original qui contient la vue de table exécute une section à deux occasions différentes: une section lorsque la ligne de cellule elle-même est sélectionnée (segue à un avplayerviewcontroller et lit une vidéo en fonction de la ligne de cellule sélectionnée) vous appuyez sur un bouton situé à l'intérieur de la vue de contenu de la cellule de vue de la table. Dans la première section, je suis en mesure de passer la ligne de la cellule qui est sélectionnée avec if let indexPath = self.tableview.indexPathForSelectedRow
lorsque je remplace la première section. Cependant quand j'essaye de passer la rangée de cellules qui a été choisie quand j'essaye de passer outre la deuxième segue qui se produit quand vous appuyez sur le bouton cela ne fonctionne pas. Est-ce parce que le bouton à l'intérieur de la cellule de vue table ne sait pas dans quelle rangée elle a été sélectionnée? Si oui, comment puis-je résoudre ce problème, et si ce n'est pas ce qui est une solution viable pour résoudre ce problème? Rappel: La séquence "playDrill" est déclenchée lorsque vous sélectionnez une rangée de cellules, la séquence "Tips" est déclenchée lorsque vous sélectionnez un bouton dans la vue de contenu de cette même rangéeComment obtenir la ligne de la vue de la table de la table sélectionnée en segue?
Code pour la première séquence qui se produit lorsque vous sélectionnez un rangée de cellules (ce fonctions de Segue comme vous le souhaitez):
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()
}
code pour la deuxième Segue qui déclenche lorsque vous sélectionnez un bouton à l'intérieur de vue du contenu de la cellule (je veux ce Segue d'avoir la valeur de indexPath
comme dans le premier Segue , mais lorsque j'essaie d'utiliser ce code, il ne renvoie pas la valeur correcte):
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
}
}
}
}
Je pense en écrivant tant que vous avez fait votre question semble beaucoup plus confus qu'il doit être. Où est le code de l'IBAction du bouton? – Shades