手勢綁定功能是最常用的,但是沒有經驗的朋友,第一次用swift實現對UICollectionView集合中每個cell進行手勢綁定,就有些茫然了。如果對swift手勢和collectionview的實現還不是很清晰的話,請查看我這兩篇swift版本手勢功能簡單講以及教程:swift下使用collectionView+coreData原理+代碼注釋,剩下的就是我遇到的較痛苦的問題:如何給UICollectionViewCell綁定手勢,就是給每個cell綁定手勢!!
首先得實現代理
代碼如下 復制代碼 class ViewController:給每個cell實現代碼綁定手勢
代碼如下 復制代碼func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("newCell", forIndexPath: indexPath) as myCollectionViewCell
cell.backgroundColor=UIColor.blackColor()
var z: AnyObject! = dataArr[indexPath.row].valueForKey("zhangdanri")
var h: AnyObject! = dataArr[indexPath.row].valueForKey("huankuanri")
cell.textLabel?.text = "(z)~(h)"
cell.textLabel1?.text=dataArr[indexPath.row].valueForKey("bank") as? String
//這個tag是很有用的
cell.tag = indexPath.row
//最重要是下面這三行,記住是在這裡綁定手勢的,我剛開始一直不知道
lp = UILongPressGestureRecognizer(target: self, action: Selector("longPress:"))
lp.delegate = self
cell.addGestureRecognizer(lp)
return cell
}
實現long press的callback函數
代碼如下 復制代碼func longPress(recognizer: UILongPressGestureRecognizer){
//這就是你當前選中的cell的數組下標
var index = recognizer.view!.tag
//代碼部分
if(recognizer.state == .Began)//很重要!!就是按0.5秒觸發事件的開始
{
.....
}
}
每個事件都是有狀態的,狀態也是一種過程:開始-》改變-》結束 ,如果上面的代碼不進行開始判斷,則長按0.5秒後你的實際代碼會執行好幾次!!!
Began
Changed
Ended
Cancelled
Failed