2016-07-12 10 views
1

すぐに、私はダブルタップとシングルタップを実装したuitableviewCellを持っています。ダブルタップは機能します。しかし、私はシングルタップで少し問題があります。ダブルタップのために、私はタイマー付きのシングルタップを実装しました。次のコードは「シングルタップ」を正常に出力します。scheduleTimerwithTimeIntervalのselectorに引数を渡します

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 

    var now = NSDate().timeIntervalSince1970 

    if (now - lastClick < 0.3) && indexPath.isEqual(lastIndexPath) { 
     // Double tapped on cell 
     if let cell = discoverTableView.cellForRowAtIndexPath(indexPath) as? CommentCell { 
      cell.doubleTapCellActive({ (addBumpStatus, success) in 
      }) 
     } 
     singleTapTimer?.invalidate() 

    } else { 
     singleTapTimer = NSTimer.scheduledTimerWithTimeInterval(0.31, target: self, selector: #selector(DiscoverVC.singleTapped), userInfo: nil, repeats: false) 
    } 
    lastClick = now 
    lastIndexPath = indexPath 
} 

func singleTapped() { 
    print("Single tapped") 
} 

ただし、問題は、単一のタップでどのインデックスパスが選択されたかを知ることです。

#selector(DiscoverVC.singleTapped(_:indexPath)) 
func singleTapped(indexPath: NSIndexPath) {} 

しかし、これはセレクタがこの構文を気に入らないため、私にエラーが発生します。セレクタを動作させる方法やより良い方法を作る方法はありますか?通常の方法はNSTimerパラメータ

func singleTapped(timer : NSTimer) { 
    print("Single tapped", timer.userInfo!["indexPath"] as! NSIndexPath) 
} 

とアクションを実装し、例えば、タイマーのuserInfoプロパティを使用してカスタムデータを渡すことです

+1

なぜあなたをダブルクリックにNSTimerを使用していますか?ジェスチャーも使用できます。 – ivarun

+0

私がテーブルに持っているのは3つのラベルですが、ジェスチャをセルに追加することはできません。私はセル内のすべてにジェスチャーを追加したくなかった – user172902

答えて

1

おかげで、

singleTapTimer = NSTimer.scheduledTimerWithTimeInterval(0.31, 
         target: self, 
         selector: #selector(singleTapped(_:)), 
         userInfo: ["indexPath":indexPath], 
         repeats: false) 
+0

行く方法のように思えます。しかし、私はtimer.userInfoを取得するためにtrieを! NSIndexPath、いくつかのEXC_BAD_ACCESS(コード= 1、アドレス= 0x18)エラーでクラッシュしました。私はセレクタを "singleTapped:"に変更して、引数を渡すことができることを確認しました。 – user172902

+0

私の例は動作するはずです。 'userInfo'パラメータを辞書として指定しました。 – vadian

+0

現在動作中です。ありがとう。私は、タイマが無効になった後にuserInfoを取得しようとしていました。これは禁止されています。 – user172902

関連する問題