2016-05-07 9 views
0

In meiner App habe ich eine Tabellenansicht mit einem Profilbild und einem Benutzernamen Label. Wenn Sie auf einem der 2 klicken Sie dann auf der Notwendigkeit, diese Funktion zu tun:2 Elemente in einer Zelle mit dem gleichen tapGestureRecognizer (swift)

func goToProfileScreen(gesture: UITapGestureRecognizer) { 
    self.performSegueWithIdentifier("profile", sender: nil) 
} 

aber wenn ich versuche, dies in meinem cellForRowAtIndexPath zu implementieren es funktioniert nur für das letzte Mal, dass ich es hinzugefügt haben.

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

     if let cell = tableView.dequeueReusableCellWithIdentifier("NewsCell") as? NewsCell { 
      let post = self.posts[indexPath.row] 

      cell.request?.cancel() 

      let profileTapRecognizer = UITapGestureRecognizer(target: self, action: #selector(NewsVC.goToProfileScreen(_:))) 
      profileTapRecognizer.numberOfTapsRequired = 1 
      // profileTapRecognizer.delegate = self 

      cell.profileImg.tag = indexPath.row 
      cell.profileImg.userInteractionEnabled = true 
      cell.profileImg.addGestureRecognizer(profileTapRecognizer) 

      cell.usernameLabel.tag = indexPath.row 
      cell.usernameLabel.userInteractionEnabled = true 
      cell.usernameLabel.addGestureRecognizer(profileTapRecognizer) 

      var img: UIImage? 

      if let url = post.profileImageURL { 
       if url != "" { 
        img = NewsVC.imageCache.objectForKey(url) as? UIImage 
       } 
      } 

      cell.configureCell(post, img: img) 
      cell.selectionStyle = .None 

      return cell 

     } else { 

      return NewsCell() 
     } 
    } 

so jetzt funktioniert es für den Benutzernamen Label. wenn ich zuerst die benutzername-label in den code und dann die profileImg, dann funktioniert es nur für die profileImg?

wie kann ich es für beide arbeiten?

Antwort

0

Sie müssen 2 verschiedene tapRecognizer verwenden, da ein UITapGestureRecognizer nur an eine Ansicht angehängt werden kann. ("Sie sind Objekte, die Sie eine Ansicht anhängen", Apple Doku)

let profileTapRecognizer1 = UITapGestureRecognizer(target: self, action: #selector(NewsVC.goToProfileScreen(_:))) 
let profileTapRecognizer2 = UITapGestureRecognizer(target: self, action: #selector(NewsVC.goToProfileScreen(_:))) 
profileTapRecognizer1.numberOfTapsRequired = 1 
profileTapRecognizer2.numberOfTapsRequired = 1 

// profileTapRecognizer1.delegate = self 
// profileTapRecognizer2.delegate = self 

cell.profileImg.tag = indexPath.row 
cell.profileImg.userInteractionEnabled = true 
cell.profileImg.addGestureRecognizer(profileTapRecognizer1) 

cell.usernameLabel.tag = indexPath.row 
cell.usernameLabel.userInteractionEnabled = true 
cell.usernameLabel.addGestureRecognizer(profileTapRecognizer2) 
+0

werde es thx versuchen. Ich habe es nie ausprobiert, weil ich dachte, es wäre zu viel Code und Wiederholung für die gleiche Antwort .. Aber ok :) –

+0

Bekam es, und es funktioniert :) Warum müssen sie es so machen? es wäre so viel einfacher und schneller, wenn Sie nur die selbe GesteRecognizer verwenden könnten ... –

+0

Ich habe meine Antwort oben bearbeitet – 123FLO321

Verwandte Themen