5

我有一個PFQueryTableViewController,其中我正在嘗試學習一些tableView交互。在UITableViewCell上檢測雙擊和單擊執行兩個動作

我目前有:中的tableView細胞會增加其高度的水龍頭didSelectRowAtIndexPath或者我可以用一個水龍頭使用performSegueWithIdentifierprepareForSegue一起Segue公司基本細胞相關數據到明年的viewController。

在下面的代碼中,如果我評論「Tap代碼增加tableView單元格的高度」代碼,我可以檢測到雙擊。其他方面,單擊可以增加高度,因爲代碼位於didSelect塊內。

我需要的: 在單擊時,單元格高度會增加或減少。當細胞高度增加時,如果我雙擊,它應該將細胞數據傳至下一個UIViewController

如果不是,單擊應增加或減少高度。而雙擊應該Segue公司電池數據到明年UIViewController

守則如下:

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") 
    } 

的另一種方式,我可以讓它工作,如果我能得到所選單元格的NSIndexPathdidSelectRowAtIndexPath代碼之外,我基本上可以使用雙擊來執行其他操作。你可以在tableView默認塊之外獲得NSIndexPath嗎?

+0

你可以通過委託給你傳遞cell對象,並找到indexpath: NSIndexPath * indexPath = [self.tableView indexPathForCell:cell]; – Mohamad

回答

3

明白了!

首先:定義var customNSIndexPath = NSIndexPath()並在didSelectRowAtIndexPath代碼塊中添加下面的代碼。

customNSIndexPath = indexPath 
     print(customNSIndexPath) 

二:刪除從didSelectRowAtIndexPath「點擊代碼以增加的tableView單元高度」代碼,並添加到singleTap()功能。並使用doubleTap()執行segue。

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() 
    } 

這就是你如何在沒有睡覺的情況下晚點工作的原因。這是最容易做的事情。謝謝

注意:如果有人有更好的解決方案,或者這個在某些xyz情況下是錯誤的,請做評論。如果你的更好,它確實會幫助其他人。