回答編集履歴

5

さらについき

2019/10/02 06:15

投稿

takabosoft
takabosoft

スコア8356

test CHANGED
@@ -14,7 +14,19 @@
14
14
 
15
15
 
16
16
 
17
+ また、おそらくセルの数を増やしてスクロールすると、チェックマークとセルの選択が一致しない可能性がありますので、以下のようなコードで選択状態とチェックマークを同期させる必要がありそうです。
18
+
19
+
20
+
21
+ ```swift
22
+
17
- また、おそらくセルの数を増やしてスクロールすると、チェックマークとセルの選択が一致しない可能性がありますので、`func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell`の中で選択状態を見てチェックマークの更新を行ってください。
23
+ func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
24
+
25
+ cell.accessoryType = cell.isSelected ? .checkmark : .none
26
+
27
+ }
28
+
29
+ ```
18
30
 
19
31
 
20
32
 

4

改善

2019/10/02 06:15

投稿

takabosoft
takabosoft

スコア8356

test CHANGED
@@ -4,15 +4,25 @@
4
4
 
5
5
  だったら
6
6
 
7
- UITableViewのindexPathsForSelectedRowsを使えば、選択しているセルのIndexPath一覧が取れますので、
7
+ UITableViewの[indexPathsForSelectedRows](https://developer.apple.com/documentation/uikit/uitableview/1614864-indexpathsforselectedrows)を使えば、選択しているセルのIndexPath一覧が取れますので、
8
8
 
9
- https://developer.apple.com/documentation/uikit/uitableview/1614864-indexpathsforselectedrows
10
-
11
- 選択状態が変わったタイミングで、毎回合計値を求めれそれ終わりです。
9
+ 選択状態が変わったタイミングで、毎回合計値を算出しなおせOKです。
12
10
 
13
11
 
14
12
 
15
- なお、メンバー変数に合計値を持っておいて、セルのタップによってその合計値を足したり減らしたりするのは、整数だったらまだいいですが、小数などでは誤差がでるので、辞めたほうがいいです。毎回合計値を求める方がたぶん安全です。
13
+ メンバー変数に合計値を持っておいて、セルのタップによってその合計値を足したり減らしたりするのは、整数だったらまだいいですが、小数などでは誤差がでるので、辞めたほうがいいです。毎回合計値を求める方がたぶん安全です。
14
+
15
+
16
+
17
+ また、おそらくセルの数を増やしてスクロールすると、チェックマークとセルの選択が一致しない可能性がありますので、`func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell`の中で選択状態を見てチェックマークの更新を行ってください。
18
+
19
+
20
+
21
+ ちなみにアクセサリータイプで自分でチェックマークを設定しなくても、標準機能としてチェックマークを出すこともできます。
22
+
23
+ 参考:
24
+
25
+ [How to select multiple rows in UITableView in edit mode?](https://stackoverflow.com/questions/33970807/how-to-select-multiple-rows-in-uitableview-in-edit-mode)
16
26
 
17
27
 
18
28
 

3

もともと複数選択モードを利用しているようなので改善

2019/10/02 05:53

投稿

takabosoft
takabosoft

スコア8356

test CHANGED
@@ -1,40 +1,22 @@
1
- UITableViewにももともと複数選択ができる機能がありまして
1
+ UITableView自体の複数選択機能をオンにしているんですよね?
2
-
3
- そちらを使えば、UITableView側が選択したセルの一覧を覚えているので、あとから選択されているセル一覧を取得するのは容易だったりします。
4
2
 
5
3
 
6
4
 
7
- 参考:
5
+ だったら
8
6
 
9
- https://stackoverflow.com/questions/33970807/how-to-select-multiple-rows-in-uitableview-in-edit-mode
7
+ UITableViewのindexPathsForSelectedRowsを使えば、選択しているセルのIndexPath一覧が取れますので、
10
8
 
11
- (左に青丸のチェックマークが付きます)
9
+ https://developer.apple.com/documentation/uikit/uitableview/1614864-indexpathsforselectedrows
12
10
 
13
-
14
-
15
- 今回は質問者さんはセルのアクセサリータイプとしてチェックマークを表示していますので、
16
-
17
- この方針で行く場合
18
-
19
-
20
-
21
- 0. チェック状態をbool配列かSet型で自分で管理する(=メンバー変数にチェック状態をなんとかして保持する)
22
-
23
- 0. `func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell`でセルを生成する際にチェック状態を管理しているメンバー変数をもとにCellへチェック状態を復元
24
-
25
- 0. セルップチェック状態自分更新(Cellとメンバー変数両方)
11
+ 選択状態が変わったイミング、毎回合計値求めればそれ終わりです。
26
-
27
-
28
-
29
- としてください。
30
-
31
-
32
-
33
- あとは、3のタイミングで、「どのセルが選択されているか?」はメンバー変数を見ればわかりますし、「選択されているセルの価格がいくらか?」もself.priceArrayを見ればわかりますので、合計を求めて表示するだけです。
34
12
 
35
13
 
36
14
 
37
15
  なお、メンバー変数に合計値を持っておいて、セルのタップによってその合計値を足したり減らしたりするのは、整数だったらまだいいですが、小数などでは誤差がでるので、辞めたほうがいいです。毎回合計値を求める方がたぶん安全です。
16
+
17
+
18
+
19
+ ----
38
20
 
39
21
 
40
22
 

2

1

2019/10/02 05:48

投稿

takabosoft
takabosoft

スコア8356

test CHANGED
@@ -18,7 +18,7 @@
18
18
 
19
19
 
20
20
 
21
- 0. チェック状態をbool配列かSet型で自分で管理する
21
+ 0. チェック状態をbool配列かSet型で自分で管理する(=メンバー変数にチェック状態をなんとかして保持する)
22
22
 
23
23
  0. `func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell`でセルを生成する際にチェック状態を管理しているメンバー変数をもとにCellへチェック状態を復元
24
24
 

1

0

2019/10/02 05:37

投稿

takabosoft
takabosoft

スコア8356

test CHANGED
@@ -12,13 +12,13 @@
12
12
 
13
13
 
14
14
 
15
- ただ、今回は質問者さんはセルのアクセサリータイプとしてチェックマークを表示しています
15
+ 今回は質問者さんはセルのアクセサリータイプとしてチェックマークを表示していますので
16
16
 
17
17
  この方針で行く場合
18
18
 
19
19
 
20
20
 
21
- 0. チェック状態を配列かSet型で自分で管理する
21
+ 0. チェック状態をbool配列かSet型で自分で管理する
22
22
 
23
23
  0. `func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell`でセルを生成する際にチェック状態を管理しているメンバー変数をもとにCellへチェック状態を復元
24
24