5

Ich habe ein PFQueryTableViewController, in dem ich einige Tableview-Interaktionen zu lernen versuchen.Erkennen von Doppel- und Einzel Tippen auf UITableViewCell auszuführen zwei Aktions

Was ich derzeit habe: Die Tableview Zelle erhöht seine Höhe auf einem Hahn didSelectRowAtIndexPath oder ich kann im Grunde Zelle bezogene Daten zum nächsten Viewcontroller segue performSegueWithIdentifier zusammen mit prepareForSegue mit einem einzigen Antippen mit.

Im folgenden Code, wenn ich den „Tap-Code zu erhöhen Höhe von Tableview Zelle“ Kommentar-Code, kann ich doppelt tippen erkennen. Andernfalls erhöht der einzelne Tap die Höhe, wenn der Code im didSelect-Block ist.

Was ich brauche: Auf Einzel Hahn, Zellenhöhe erhöht oder Abnahme. Während die Zellenhöhe erhöht wird, wenn ich tippen verdoppeln, sollte es Zellendaten zum nächsten UIViewController segue.

Wenn nicht, der einzelne Hahn soll die Höhe erhöhen oder verringern. Und doppelt tippen sollen Zellendaten zum nächsten UIViewController

-Code Segue als unten:

var selectedCellIndexPath: NSIndexPath? 
var SelectedCellHeight = CGFloat() // currently set to 480.0 tableView height 
var UnselectedCellHeight = CGFloat() // currently set to 300.0 tableView unselected hight 
    .... 

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
    if let selectedCellIndexPath = selectedCellIndexPath { 
     if selectedCellIndexPath == indexPath { 
      return SelectedCellHeight 
     } 
    } 
    return UnselectedCellHeight 
} 

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    var cell = tableView.dequeueReusableCellWithIdentifier("cell") as! DataViewTableViewCell! 
    if cell == nil { 
     cell = DataViewTableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "cell") 
    } 

// Below is the double Tap gesture recognizer code in which 
// The single tap is working, double tap is quite difficult to get 
// as the cell height increases on single tap of the cell 

    let doubleTap = UITapGestureRecognizer() 
     doubleTap.numberOfTapsRequired = 2 
     doubleTap.numberOfTouchesRequired = 1 
     tableView.addGestureRecognizer(doubleTap) 

     let singleTap = UITapGestureRecognizer() 
     singleTap.numberOfTapsRequired = 1 
     singleTap.numberOfTouchesRequired = 1 
     singleTap.requireGestureRecognizerToFail(doubleTap) 
     tableView.addGestureRecognizer(singleTap) 

// Tap code to increases height of tableView cell 

    if let selectedCellIndexPath = selectedCellIndexPath { 
     if selectedCellIndexPath == indexPath { 
      self.selectedCellIndexPath = nil 
      cell.postComment.fadeIn() 
      cell.postCreatorPicture.alpha = 1 
      cell.postDate.fadeIn() 
      // cell.postTime.fadeIn() 
      cell.postCreator.fadeIn() 
     } else { 
      self.selectedCellIndexPath = indexPath 
     } 
    } else { 
     selectedCellIndexPath = indexPath 
    } 
    tableView.beginUpdates() 
    tableView.endUpdates() 
} 



func doubleTap() { 
     print("Double Tap") 
    } 

func singleTap() { 
     print("Single Tap") 
    } 

Die andere Art und Weise kann ich es Arbeit ist, wenn ich NSIndexPath von ausgewählter Zelle außerhalb des didSelectRowAtIndexPath Code bekommen, ich kann grundsätzlich den Doppeltipp nutzen, um sonst die gewünschte Aktion zu bekommen. Können Sie NSIndexPath außerhalb der Standardblöcke von tableView abrufen?

+0

können Sie übergeben Sie Zelle Objekt mit Stellvertreter und finden Sie den Indexpfad mit: NSIndexPath * indexPath = [self.tableView indexPathForCell: Zelle]; – Mohamad

Antwort

3

habe es funktioniert!

Zuerst: Definieren Sie var customNSIndexPath = NSIndexPath() und fügen Sie den folgenden Code in den Codeblock didSelectRowAtIndexPath ein.

customNSIndexPath = indexPath 
     print(customNSIndexPath) 

Zweitens: Entfernen Sie „Tap-Code zu erhöhen Höhe von Tableview Zelle“ Code aus didSelectRowAtIndexPath und fügen Sie die singleTap() Funktion. Und führen Sie den Übergang mit der doubleTap().

func doubleTap() { 
     print("Double Tap") 
     performSegueWithIdentifier("MainToPost", sender: self) 
    } 

    func singleTap() { 
     print("Single Tap") 
     var cell = tableView.dequeueReusableCellWithIdentifier("cell") as! DataViewTableViewCell! 
     if cell == nil { 
      cell = DataViewTableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "cell") 
     } 

     if let selectedCellIndexPath = selectedCellIndexPath { 
      if selectedCellIndexPath == customNSIndexPath { 
       self.selectedCellIndexPath = nil 

      } else { 
       self.selectedCellIndexPath = customNSIndexPath 
      } 
     } else { 
      selectedCellIndexPath = customNSIndexPath 
     } 
     tableView.beginUpdates() 
     tableView.endUpdates() 
    } 

Dies ist, wie Sie spät arbeiten, ohne zu schlafen. Es war die einfachste Sache. Danke

Hinweis: Wenn jemand eine bessere Lösung hat oder diese in einem xyz Fall falsch ist, bitte Kommentar. Wenn deiner besser ist, würde es anderen wirklich helfen.