Ho un PFQueryTableViewController
in cui sto cercando di imparare alcune interazioni tableView.Rilevamento di doppio e singolo tocco su UITableViewCell per eseguire due azioni
Quello che hanno attualmente: La cellula tableView aumenta la sua altezza su un rubinetto didSelectRowAtIndexPath
o io può sostanzialmente Segue dati relativi alla cella successiva viewController utilizzando performSegueWithIdentifier
insieme prepareForSegue
utilizzando un unico rubinetto.
Nel seguente codice, se commento il codice "Tocca codice per aumentare l'altezza del codice della tabellaView", posso rilevare il doppio tocco. Altrimenti, il singolo tocco aumenta l'altezza mentre il codice si trova all'interno del blocco SelectSelect.
Cosa mi serve: In Un tocco, l'altezza della cella aumenta o diminuisce. Mentre l'altezza della cella viene aumentata, se tocco due volte, dovrebbe seguire i dati della cella al prossimo UIViewController
.
In caso contrario, il singolo rubinetto dovrebbe aumentare o diminuire l'altezza. E doppio tap dovrebbe Segue dati della cella per il prossimo UIViewController
codice è il seguente:
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")
}
L'altro modo in cui posso farlo funzionare è, se posso ottenere NSIndexPath
della cella selezionata al di fuori di didSelectRowAtIndexPath
codice, ho può basicamente usare il doppio tocco per eseguire se altro per ottenere l'azione richiesta. Riesci a prendere NSIndexPath
al di fuori dei blocchi predefiniti di tableView?
è possibile passare l'oggetto cella con delegato e trovare il percorso di indice con: NSIndexPath * indexPath = [self.tableView indexPathForCell: cell]; – Mohamad