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

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

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

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

Swift

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

Q&A

解決済

4回答

2633閲覧

UITableViewでチェックリストを作成する

taiki9696

総合スコア17

Xcode

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

Swift

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

1グッド

0クリップ

投稿2017/01/26 13:08

編集2017/01/27 14:22

UITableViewでチェックリストを作ってみたのですが、現在Cellを押すとチェックリストのUIImageが変更されます。Cellを押すと別のUITableViewに移動でき、UIImageを押下時にのみ画像が変更されるようにするにするにはどうすればいいでしょうか?

import

1 2class ViewController : UIViewController, UITableViewDelegate, UITableViewDataSource { 3 4 let statusBarHeight = UIApplication.shared.statusBarFrame.height 5 6 var checkListItem: [String : Bool] = [ 7 "アイテム1" : false, 8 "アイテム2" : false, 9 ] 10 11 let tableView = UITableView() 12 13 override func viewDidLoad() { 14 super.viewDidLoad() 15 16 // UITableView の作成 17 tableView.frame = CGRect( 18 x: 0, 19 y: statusBarHeight, 20 width: self.view.frame.width, 21 height: self.view.frame.height - statusBarHeight 22 ) 23 tableView.delegate = self 24 tableView.dataSource = self 25 self.view.addSubview(tableView) 26 } 27 28 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 29 30 var keys = [String](checkListItem.keys) 31 32 keys.sort() 33 34 let cellText = keys[indexPath.row] 35 36 let cell = UITableViewCell(style: .default, reuseIdentifier: "cell") 37 cell.textLabel?.text = cellText 38 39 if self.checkListItem[cellText]! { 40 cell.imageView?.image = UIImage(named: "checked") 41 } else { 42 cell.imageView?.image = UIImage(named: "unchecked") 43 } 44 45 return cell 46 } 47 48 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 49 50 if let cell = tableView.cellForRow(at: indexPath) { 51 52 let cellText = cell.textLabel?.text 53 54 if cell.imageView?.image == UIImage(named: "checked") { 55 56 self.checkListItem.updateValue(false, forKey: cellText!) 57 cell.imageView?.image = UIImage(named: "unchecked") 58 } else { 59 60 self.checkListItem.updateValue(true, forKey: cellText!) 61 cell.imageView?.image = UIImage(named: "checked") 62 } 63 64 cell.isSelected = false 65 } 66 } 67 68 func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 69 return 56 70 } 71 72 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 73 return self.checkListItem.count 74 } 75}
pi.chan_san👍を押しています

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

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

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

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

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

fuzzball

2017/01/27 00:53

タイトルと質問内容があっていないような気がするのですが?
guest

回答4

0

ベストアンサー

セルをカスタムして UIButtonを乗せて通常、選択時の画像を設定、押された時に画像を切り替えるのが簡単では無いでしょうか。

swift

1@IBAction func pushButton(_ sender: UIButton) { 2 sender.isSelected = !sender.isSelected 3}

投稿2017/01/27 03:57

_Kentarou

総合スコア8490

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

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

taiki9696

2017/01/27 18:50

チェックリストを含むUITableViewですが実は80ページほど作成する必要があります。やはりカスタムセルでは厳しいでしょうか?
_Kentarou

2017/01/28 00:05

同じデザインのViewならば何ページあっても作成するのは1つなのでなんの問題もないと思いますが。
taiki9696

2017/01/28 00:51

カスタムセルの場合ですとMainstoryboardに80個のUITableViewを作成する必要があると認識しているのですが、一つのカスタムセルをMainstoryboardで作成すると同じデザインであればコードのみで複製が作れるのでしょうか? 各UITableViewによってセルやUIButtonの数、textの中身など微妙に異なるものを考えております。
_Kentarou

2017/01/28 05:41 編集

> Mainstoryboardに80個のUITableViewを作成する必要があると認識しているのですが Storyboardは分割できますので一つのStoryboardに80個は配置する必要がないと思います。 それに80個つくらなくてもUITableViewを使いまわせると思いますがいかがでしょう? カスタムセルはxibで作成して読み込む様にすれば良いと思います。(コードで複製ができるというのと同じです。) > 各UITableViewによってセルやUIButtonの数、textの中身など微妙に異なるものを考えております。 微妙に違うくらいでしたら、まとめてもよいと思います。 こちらもデザイン的に違うセルが10個とかある感じですか?そのくらいなら普通に作ってもよいと思いますが。
taiki9696

2017/01/29 03:31

なるほど、カスタムセルをxibで作成して読み込むという方法があるのですね。丁寧な回答ありがとうございます。
guest

0

まあカスタムセルでごり押しすると慣れない間は面倒なこともありますけどね。

<注意点>
・UIButtonを乗せることでcellのtextLabelとの位置関係もずれたりするので場合によっては全部自分で作ることになる可能性がある。
・セルの上に乗せた際にその上をタップしてもdidSelectRowが呼ばれない

あたりですかね
この場合、少なくとも、cell.textLabelのtextAlignmentはcenterかrightに設定する必要があると思います。(ボタンで隠れるので)

投稿2017/01/27 12:10

編集2017/01/27 12:13
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

UIImageViewにUITapGestureRecognizerを乗せて下さい。
なお、UIImageViewは、デフォルトではタップに反応しませんので、userInteractionEnabledをtrueにして下さい。

投稿2017/01/27 00:52

fuzzball

総合スコア16731

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

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

0

それはつまり、画像の部分とその他の部分を押された時に判別したいというかことですよね?であるとすると、カスタムセルを作り、その上にボタンを乗せ、ボタンにsetImageする形になると思います。
カスタムセルでどのセルがタップされたのかを判別するには
カスタムセルの基本
を参考にして下さい。

投稿2017/01/26 23:04

編集2017/01/27 12:12
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問