うるおいらんど

アプリ開発やサイト制作のメモとか。

【Swift】UICollectionViewでチェックマークをつける

魚ライン
魚ライン

1日1個しか進まない呪いにでもかかってるのかな・・・?

これはもう3日4日ぐらい悩みました・・・。別の作業をして若干諦め気味だったけれどようやくできました。よかった。

 

UICollectionViewにチェックマークをつける。要は写真アプリと一緒なことがしたいのですが、最後のセルにしかマークが付かなかったり、連続でONにすることはできるがOFFにすることはできなかったり。

とにかく説明していきます〜。UICollectionViewの使い方云々は割愛。

 

全体の流れ

①空の配列を用意

②タップしたセルのindexPathを配列にいれる

③コレクションビューをリロードする

④リロードした際に分岐する。indexPathが配列内にある場合はチェックマークを表示させる

⑤もう一度タップされたら配列からindexPathを取り除く

 

セルをタップした時のアクション

まず、空の配列を用意します。

次にセルをタップしたときのアクションを設定します。

 

collectionView:didSelectItemAtIndexPath:メソッド内で配列にタップされたセルの行列情報を入れておきます。

最初にタップされた際(on)には配列は空なので、elseを通りindexPathを配列にいれます。

次にタップされた際(off)には配列からindexPathを取り除きます。

 

分岐をしてチェックマークをつける

セルを作成します。

 

チェックボタンの画像は自分で作成しておきます。

collectionView:cellForItemAtIndexPath:メソッド内でセルを作成します。

セルのsubviewを初期化し、先ほど作成した配列の中にindexPathがあればチェックマークをセルに表示させます。

indexPathがなければ何も表示しません。

 

最初にcellのsubviewを初期化するのを忘れずに。詳しくはこちらの記事(UICollectionViewで二重に表示されるのを防ぐ)

 

これで完了のはずです〜

チェックマークをすべて消す場合はこんな感じです。

 

 

失敗談・・・

こちらの記事を参考して最初はこのようにして場合分けしていました

 

もしかしたら途中で書き換えてしまったのかもしれませんが、cellのtag内にはindexPath.rowが入っています。(最初はちゃんと動いたと思ったんですが・・・)

これはタグが2で割り切れればfalseを返し、割り切れなければtrueを返します。そうすることで1回タップで背景を赤色に、2回目は消す、3回目は赤・・・という風にon/offができています。

 

しかし私のタグにはindexPath.rowが入っている。。。0番目のところ(偶数番目)は上手くいくのですが1番目(奇数番目)は上手く動きません。

それでも最初は上手く動いてたので(ように見えてただけかもれしませんが)よくわからない・・・

 

とりあえず上手くチェックマークをつけることに成功しましたが、何故失敗したのかも考えていかないとですね(´・ω・`)

 

参考サイト

UICollectionViewで画像を複数選択する時のメモ

CollectionVIewで複数選択&tagの意外な使い方

魚ライン
モッピー!お金がたまるポイントサイト
魚ライン

Swiftの記事一覧を見る

コメント

コメントは認証制です。詳しくは下記の注意をお読みください。

コメントを残す

コメント時の注意

「Twitter」「Facebook」「Google+」「WordPress」のいずれかのアカウントをお持ちの方は各アカウントと連携することでコメントできます。 コメントしたことはSNSに流れませんので、アカウントをお持ちの方はこちらの方法でコメントを投稿して下さると嬉しいです。 アカウントをお持ちでない方はメールアドレスで投稿することができます。 初回コメント時は承認後に表示されます。

魚ライン 魚ライン