2016-11-28 5 views
0

私はテーブル内の任意のセル(行)に対して特定のアクションを実行するためにスワイプジェスチャを必要とするUITableViewを使ってiOSアプリケーションを開発しています。UITableViewCellsなどのUI要素を繰り返すためのジェスチャ認識プログラムを設定する方法はありますか?

私が初めてビューコントローラ(UITableViewを持つもの)内でジェスチャのIBActionを実装したとき、Xcodeが私にエラーでないことを通知したので、私もアプリケーションを実行できませんでした再利用可能なセルをデキューすることによって新しいジェスチャが生成されるたびにジェスチャを反復するインタフェース要素に追加することができます(セルは繰り返し要素です)。

そこで、カスタムテーブルセルクラスの中にスワイプジェスチャのIBActionを配置しました。その時点でビルド/実行を妨げるエラーは表示されなくなりましたが、デバッグではまだ警告が表示されていますiOS9以来、システムは繰り返し要素(この場合は私の表のセル)に付けられたジェスチャーの禁止を強制するようになっています。

誰かがジェスチャー認識機能を理解している場合は、以下の質問を理解するのに役立つと感謝します。

  1. 私はこの警告を額面価格で受け取り、テーブルセルにジェスチャーを一切付けないことを前提にしてください。

  2. どちらの場合でも、プロトタイプの表のセルのような繰り返し要素にジェスチャーを付けて、何らかの警告/禁止を回避する方法がありますか?

+0

あなたはこれに従う必要がある - http://stackoverflow.com/questions/32004557/swipe-able-table-view-cell-in-ios9-or-swift-guide-at -least – Santosh

+0

私はそれが必要です。デリゲートメソッドでは、左から右へのスワイプだけが容易になりますが、これは実装する必要があります。 – Foefirelord

+0

'UIGestureRecognizer'をXcodeのテーブルビューのセルにドラッグすることはできませんが、このエラーが発生しますが、実行時に' UITableViewCell'サブクラスでジェスチャ認識子を作成することができます。完璧に動作します。 –

答えて

1

あなたのビューコントローラーにスワイプを置き、下のコードでスワイプIBActionでセルを取得する必要があります。あなたはそれをやった後は、あなたがやりたいことができます。

のObjective C:

CGPoint location = [sender locationInView:self.tableView]; 
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:location]; 
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath]; 
cell.do_somethingまたはcell.element.do_somethingは

あなたは次のように、スワイプの位置で細胞を取得します

スウィフト:

let location : CGPoint = sender.locationInView(self.tableView) 
let indexPath : NSIndexPath = tableView.indexPathForRowAtPoint(location) 
let cell : UITableViewCell = tableView(tableView, cellForRowAtIndexPath: indexPath) 
+0

私はこれがおそらくすぐに解決したと思っていました。私は既に提供したコードを実装していましたが、ジェスチャ認識機能をUITableViewに接続して表示コントローラを接続することで動作すると仮定するのは安全でしょうか? UITableViewControllerではなく、UITableViewでUIViewControllerを使用しているためです。 – Foefirelord

+0

私はこの同じ状況、uiViewController内部のuitableview、あなたのテストはuitableview "sender.locationInView(self.tableView)に基づいているということです"私は実際には、おそらくテストのリングに何が起こったのか覚えていないNilの問題は解決します。 –

関連する問題