2017-08-30 1 views
1

Dans mon story-board, j'ai quelques images qui sont "User Interaction Enabled". Dans le UIViewController je remplace la fonction touchesEnded.Obtenir le nom d'image à partir de touchesEnded

override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) { 
     super.touchesEnded(touches, with: event) 
} 

Est-il possible pour moi d'obtenir le nom de l'image qui a été cliquée dans cette fonction? Je préférerais ne pas @IBOutlet les images.

+0

Pouvez-vous expliquer pourquoi vous ne souhaitez pas utiliser IBOutlet pour les images? La vue est-elle dynamique ou la mise en page est-elle identique chaque fois qu'elle est affichée? – Stephen

+0

@stephen C'est un mélange d'images statiques et d'images dynamiques dans une stackview. –

+0

Cochez cette réponse: https://stackoverflow.com/a/5192999/1718685 vous devriez être en mesure de déterminer la vue ci-dessous le toucher. – Stephen

Répondre

0

Je suis assez certain que ce n'est pas possible exactement comme vous le voulez. Les vues d'image ne conservent pas le fichier dont elles ont chargé l'image, mais uniquement les données d'image elles-mêmes. Mais je suppose que vous définissez les noms d'image dans IB et essayez d'obtenir ce nom après un événement tactile, dans ce cas vous pouvez définir le nom de l'image dans l'ID de restauration de l'élément et récupérer le nom via la propriété restorationIdentifier de l'élément touché.

Vous pouvez obtenir l'élément touché comme ceci:

override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) { 
    if let touch: UITouch = touches.first { 
     let location = touch.location(in: self.view) 
     let touchedView = self.view.hitTest(location, with: event) 

     print(touchedView.restorationIdentifier) 
    } 
} 

Notez que vous devez définir le nom du fichier image deux fois si vous voulez comme cela, et changer deux fois la valeur lors de changements. Ce que vous essayez sent mauvais design, donc s'il y a une autre façon d'y aller avec ça.

+0

Comment est-ce que je récupérerais cet ID de restauration dans touchEnded? –

+0

@ DanielÅsberg vérifier mon édition – kevin

0

Si j'ai bien compris votre question, vous ne voulez pas utiliser @IBOutlet, mais vous devez cliquer sur le nom de l'image. Donc, pour cela, vous pouvez également donner tag à UIImageView pour les identifier, et plus tard, vous pouvez accéder à toute information.

première de story-board, affecter 1 ou toute valeur entière à tag propriété et vérifier User Interaction Enabled pour ImageView.

Remplacer touchesEnded avec le lignes- suivant

override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) { 
     if let touch: UITouch = touches.first { 
      let location = touch.location(in: self.view) 
      if let touchedView = self.view.hitTest(location, with: event) as? UIImageView { 
       if touchedView.tag == 1 { 
        debugPrint(touchedView.image) 
       } 
      } 
     } 
    } 

Hope it helps.

+0

que voulez-vous dire que ** S'il vous plaît ne downvote pas **. il n'est pas permis de mentionner ce genre de métnion en réponse. Si vous n'êtes pas sûr de votre réponse, ajoutez simplement un commentaire. –

+0

Comment est-ce que je retrouverais cette balise dans touchEnded? –

+0

@NitinGohel je suis nouveau ici, donc ne sais pas beaucoup, et j'aurais ajouté commnt mais il faut 50 réputation. – Maanu