質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

2回答

3177閲覧

UITableViewCellをスワイプ操作だけで削除したい。

Aki_1988

総合スコア44

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2017/03/12 09:45

編集2017/03/12 10:17

###前提・実現したいこと
swiftでスワイプで、完了/削除のできるテーブルを作成したいです。

###発生している問題
MCSwipeTableViewCellを使用してスワイプまでは実装できましたが、
スワイプ後の削除方法がわからず。。。
おそらく基本的なことかと思いますが、調べてみると「ボタン押下で削除」系の記事が多く、
ご教授頂ければと思います。

###ソースコード

swift

1import UIKit 2import MCSwipeTableViewCell 3 4class ViewController: UIViewController,UITableViewDataSource { 5 6 var dataList = ["task01","task02", "task03","task04"] 7 8 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 9 // create 10 var cell = tableView.dequeueReusableCellWithIdentifier("cell") as? MCSwipeTableViewCell 11 if cell == nil { 12 cell = MCSwipeTableViewCell(style: .Subtitle, reuseIdentifier: "cell") 13 } 14 15 // setup 16 cell!.selectionStyle = .None 17 cell!.textLabel?.text = dataList[indexPath.row] 18 cell!.detailTextLabel?.text = "details..." 19 cell?.detailTextLabel?.textColor = .lightGrayColor() 20 cell!.defaultColor = .lightGrayColor() 21 cell!.firstTrigger = 0.25; 22 23 // listeners 24 cell!.setSwipeGestureWithView(UIImageView(image: UIImage(named: "check")!), color: .greenColor(), mode: .Exit, state: .State1, completionBlock: { (cell: MCSwipeTableViewCell!, state: MCSwipeTableViewCellState!, mode: MCSwipeTableViewCellMode!) -> Void in 25 print("check") 26 }) 27 28 cell!.setSwipeGestureWithView(UIImageView(image: UIImage(named: "clock")!), color: .purpleColor(), mode: .Exit, state: .State3, completionBlock: { (cell: MCSwipeTableViewCell!, state: MCSwipeTableViewCellState!, mode: MCSwipeTableViewCellMode!) -> Void in 29 print("clock") 30 }) 31 32 return cell! 33 } 34 35 36 37 func tableView(tableView:UITableView, numberOfRowsInSection section:Int) -> Int { 38 return dataList.count 39 } 40 41 override func viewDidLoad() { 42 super.viewDidLoad() 43 } 44 45}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

とりあえずシンプルにSwipeで削除できるようにしてみました、試してみてください。
※ 多少元のコードと変えていますので見比べてみてください。Swift3にしちゃいました、、、

swift

1import UIKit 2import MCSwipeTableViewCell 3 4class ViewController: UIViewController, UITableViewDataSource { 5 6 var dataList = ["task01","task02", "task03","task04"] 7 @IBOutlet weak var tableView: UITableView! 8 9 override func viewDidLoad() { 10 super.viewDidLoad() 11 } 12 13 14 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 15 16 // create 17 if let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as? MCSwipeTableViewCell { 18 19 // setup 20 cell.selectionStyle = .none 21 cell.textLabel?.text = dataList[indexPath.row] 22 cell.detailTextLabel?.text = "details..." 23 cell.detailTextLabel?.textColor = .lightGray 24 cell.defaultColor = .lightGray 25 cell.firstTrigger = 0.25; 26 27 cell.setSwipeGestureWith(UIImageView(image: UIImage(named: "check")), color: UIColor.green, mode: .exit, state: .state1, completionBlock: { [weak self] (cell, state, mode) in 28 29 30 if let cell = cell, let indexPath = tableView.indexPath(for: cell) { 31 self?.dataList.remove(at: indexPath.row) 32 // 該当のセルを削除 33 self?.tableView.deleteRows(at: [indexPath], with: .fade) 34 } 35 }) 36 return cell 37 } 38 return UITableViewCell() 39 } 40 41 func tableView(_ tableView:UITableView, numberOfRowsInSection section:Int) -> Int { 42 return dataList.count 43 } 44}

投稿2017/03/12 10:27

編集2017/03/12 10:30
_Kentarou

総合スコア8490

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Aki_1988

2017/03/12 12:24

ご回答ありがとうございます! いまやってみたところ、" use of undeclared type indexPath "と表示されてしまいます。。 swiftのバージョンのせいでしょうか?
Aki_1988

2017/03/12 12:27

indexPathをNSindexPathに変更したところ、ViewController does not comform protocol UITableViewDatasourceと表示されてしまします。
_Kentarou

2017/03/12 13:01

プロジェクトをswift3にしても問題無いのであればそちらを切り替えて、私のコードをそのまま使ったほうが早いと思います。 swift2でやっている理由はありますか?
Aki_1988

2017/03/12 13:52

ご回答ありがとうございます。特に理由はありませんので、移行して試してみます!
Aki_1988

2017/03/13 13:52

swift3に移行してみました。コンバートも完了し、Runは問題なくできたのですが、テーブルにデータが表示されず、という現象がでてしまいました。datasourceやcellのIdentifierに誤りはないかと思うのですが...
_Kentarou

2017/03/13 14:01

delegate,datasourceはselfに設定していますか? そしてrowの数を返すメソッド、セルを生成するメソッドはよばれていますか?
Aki_1988

2017/03/13 14:05

Autolayoutで親のViewControllerにつなげてあります。またdequeueReusableCell、numberOfRowsInSectionのメソッドは設定してあります。(上記に貼って頂いたソースを使用しております)
_Kentarou

2017/03/13 14:12 編集

了解です、私がした質問の答えはいかがでしょうか?
Aki_1988

2017/03/13 14:18

申し訳ありません、ソースに記載があるかではなく、コンソール等で確認する、ということでしょうか?知識不足からご質問の具体的な意図がわからず、ご教授いただけますでしょうか。
_Kentarou

2017/03/13 14:29

私のコードではtableViewを@IBOutletでStoryboardと結んでいるのですがそちらはやられていますか?
Aki_1988

2017/03/13 14:47

はい、行っております。
_Kentarou

2017/03/13 14:52

viewDidLoadに以下の2行を追加してみてください。 override func viewDidLoad() { super.viewDidLoad() tableView.delegate = self tableView.dataSource = self }
Aki_1988

2017/03/13 14:53

しかし、おそらく私の単純なミスかと思いますので、一旦頂いたソースを元に勉強しながら自身で進めてみたいと思います。何かお気付きの点があれば、再度コメントを頂ければと思います。いつもご丁寧な回答ありがとうございます。
Aki_1988

2017/03/13 14:55

tableView.delegate = self tableView.dataSource = self こちらは試してみたのですが、やはりデータ表示がされませんでした。
Aki_1988

2017/03/13 15:00

すいません!ありがとうございます!非常に助かります!!
Aki_1988

2017/03/13 15:10

上記プロジェクトの動作確認できました。勉強させていただきます。本質問は解決済みと致します。ありがとうございました!
guest

0

参考情報

投稿2017/03/13 14:28

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問