回答編集履歴
5
さらについき
test
CHANGED
@@ -14,7 +14,19 @@
|
|
14
14
|
|
15
15
|
|
16
16
|
|
17
|
+
また、おそらくセルの数を増やしてスクロールすると、チェックマークとセルの選択が一致しない可能性がありますので、以下のようなコードで選択状態とチェックマークを同期させる必要がありそうです。
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
```swift
|
22
|
+
|
17
|
-
|
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
改善
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
もともと複数選択モードを利用しているようなので改善
test
CHANGED
@@ -1,40 +1,22 @@
|
|
1
|
-
UITableView
|
1
|
+
UITableView自体の複数選択機能をオンにしているんですよね?
|
2
|
-
|
3
|
-
そちらを使えば、UITableView側が選択したセルの一覧を覚えているので、あとから選択されているセル一覧を取得するのは容易だったりします。
|
4
2
|
|
5
3
|
|
6
4
|
|
7
|
-
|
5
|
+
だったら
|
8
6
|
|
9
|
-
|
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
|
-
|
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
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
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
|
|