TableViewのセルをタップした際は、
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
で問題なくindexPath
を取得できます。
しかし長押し(UILongPressGestureRecognizer利用)したセルのindexPath
を取得する方法は簡単には行かなかったので、その方法を共有します。
まずは、UILongPressGestureRecognizer
をtableViewに設定。
- 長押しされた際、
cellLongPressed:
メソッドでイベントを受け取ります。 - tableViewにlongPressGestureRecognizerをaddする。
swift
// UILongPressGestureRecognizer宣言
var longPressRecognizer = UILongPressGestureRecognizer(target: self, action: "cellLongPressed:")
// `UIGestureRecognizerDelegate`を設定するのをお忘れなく
longPressRecognizer.delegate = self
// tableViewにrecognizerを設定
tableView.addGestureRecognizer(longPressRecognizer)
長押ししたセルのindexPath.rowを取得。
- 長押しした位置からcellのindexPathを取得。
下記のprintln("長押しされたcellのindexPath:\(indexPath?.row)")
で
indexPath?.row
を取得できます。
swift
/* 長押しした際に呼ばれるメソッド */
func cellLongPressed(recognizer: UILongPressGestureRecognizer) {
// 押された位置でcellのPathを取得
let point = recognizer.locationInView(tableView)
let indexPath = tableView.indexPathForRowAtPoint(point)
if indexPath == nil {
} else if recognizer.state == UIGestureRecognizerState.Began {
// 長押しされた場合の処理
println("長押しされたcellのindexPath:\(indexPath?.row)")
}
}
参考
下記の記事を参考に「swift」で書き直しました。
http://iritec.jp/iphone/848/