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

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

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

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

Q&A

解決済

1回答

2321閲覧

[swift5]チェックを入れると打ち消し線が入るようにしたい

Kaguya_4869

総合スコア116

Swift

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

0グッド

0クリップ

投稿2019/11/17 10:39

#質問したいこと
swift5です。
セルにチェックを入れると打ち消し線が入るようにしたいです。
今はチェックマークは入れることができますが、打ち消し線がはいりません。
#コード

swift5

1import UIKit 2 3//変数の設置 4var todo = [String]() 5 6class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate { 7 8 9 @IBOutlet weak var maintextField: UITextField! 10 @IBOutlet weak var tableView: UITableView! 11 12 //追加ボタン 13 @IBAction func TodoAddButton(_ sender: Any) { 14 //変数に入力内容を入れる 15 todo.append(maintextField.text!) 16 //追加ボタンを押す→フィールドを空にする 17 maintextField.text = "" 18 //変数の中身をUDに追加 19 UserDefaults.standard.set(todo, forKey: "TodoList") 20 21 print("書き込み成功") 22 23 maintextField.resignFirstResponder() 24 25 self.tableView.reloadData() 26 } 27 28 29 30 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 31 let cell = tableView.cellForRow(at: indexPath) 32 cell?.accessoryType = .checkmark 33 34 35 36 func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) { 37 let cell = tableView.cellForRow(at:indexPath) 38 cell?.accessoryType = .none 39 40 } 41 42 43 //textFieldキーボードしまう 44 func textFieldShouldReturn(_ textField: UITextField) -> Bool { 45 maintextField.resignFirstResponder() 46 return true 47 } 48 49 50 //UITableView,numberOfRowsInSectionの追加(表示するcellの数を決める) 51 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 52 53 54 //表示するcell数 55 return todo.count 56 } 57 //UITableView、cellForRowAtの追加(表示するcellの中身を決める) 58 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 59 //変数を作る 60 let todocell: UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "TodoCell", for: indexPath) 61 //変数の中身を作る 62 todocell.textLabel!.text = todo[indexPath.row] 63 64 //表示する中身 65 return todocell 66 } 67 68 //セルの編集許可 69 func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool 70 { 71 return true 72 } 73 74 //スワイプしたセルを削除 75 func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) { 76 if editingStyle == UITableViewCell.EditingStyle.delete { 77 78 //itemArray.remove(at: indexPath.row) 79 todo.remove(at: indexPath.row) 80 81 // todoが更新されたので保存 82 UserDefaults.standard.set(todo, forKey: "TodoList" ) 83 84 85 tableView.deleteRows(at: [indexPath as IndexPath], with: UITableView.RowAnimation.automatic) 86 } 87 88 } 89 90 91 override func viewDidLoad() { 92 super.viewDidLoad() 93 94 self.maintextField.delegate = self 95 tableView.allowsMultipleSelection = true 96 97 98 99 //追加画面で入力した内容を取得する 100 if let todos = UserDefaults.standard.object(forKey: "TodoList") as? [String] { 101 todo = todos 102 } 103 104 // Do any additional setup after loading the view. 105 } 106 107 108 109 110} 111

#やってみたこと
ググってみましたがいいサイトが見つかりませんでした。

よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

そもそも

今はチェックマークは入れることができますが

とありますが、その実装では不十分です。

セル上のアクセサリービューなどを変えたとしても、テーブルビューのセルはスクロールなどして画面外に行ってしまうとセルの内容はリサイクル(≒破棄)され、使い物にならないと考えてください。

そのため、どこをチェックしたかはメンバー変数にも取っておく必要があります。

打ち消し線がはいりません。

打消し線を入れるコードを書いていないからです。
打ち消し線はUILabelであれば、strikethroughStyleを使えば引くことができます。

参考:
https://qiita.com/maebaru/items/974a62b741cf3a5b7af4

なお、こういう場合、いきなり今作っているアプリに対して打消し線を実装しようと思わないでください。

新規プロジェクトを作って、UILabelに取り消し線の文字を表示するだけのコードを書いて使用感を確かめて、慣れてきたらアプリに組み込む、という方法で行ってください。

投稿2019/11/18 01:27

takabosoft

総合スコア8356

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問