回答編集履歴
5
さらについき
answer
CHANGED
@@ -6,8 +6,14 @@
|
|
6
6
|
|
7
7
|
メンバー変数に合計値を持っておいて、セルのタップによってその合計値を足したり減らしたりするのは、整数だったらまだいいですが、小数などでは誤差がでるので、辞めたほうがいいです。毎回合計値を求める方がたぶん安全です。
|
8
8
|
|
9
|
-
また、おそらくセルの数を増やしてスクロールすると、チェックマークとセルの選択が一致しない可能性がありますので、
|
9
|
+
また、おそらくセルの数を増やしてスクロールすると、チェックマークとセルの選択が一致しない可能性がありますので、以下のようなコードで選択状態とチェックマークを同期させる必要がありそうです。
|
10
10
|
|
11
|
+
```swift
|
12
|
+
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
|
13
|
+
cell.accessoryType = cell.isSelected ? .checkmark : .none
|
14
|
+
}
|
15
|
+
```
|
16
|
+
|
11
17
|
ちなみにアクセサリータイプで自分でチェックマークを設定しなくても、標準機能としてチェックマークを出すこともできます。
|
12
18
|
参考:
|
13
19
|
[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)
|
4
改善
answer
CHANGED
@@ -1,12 +1,17 @@
|
|
1
1
|
UITableView自体の複数選択機能をオンにしているんですよね?
|
2
2
|
|
3
3
|
だったら
|
4
|
-
UITableViewのindexPathsForSelectedRowsを使えば、選択しているセルのIndexPath一覧が取れますので、
|
5
|
-
https://developer.apple.com/documentation/uikit/uitableview/1614864-indexpathsforselectedrows
|
4
|
+
UITableViewの[indexPathsForSelectedRows](https://developer.apple.com/documentation/uikit/uitableview/1614864-indexpathsforselectedrows)を使えば、選択しているセルのIndexPath一覧が取れますので、
|
6
|
-
選択状態が変わったタイミングで、毎回合計値を
|
5
|
+
選択状態が変わったタイミングで、毎回合計値を算出しなおせばOKです。
|
7
6
|
|
8
|
-
|
7
|
+
メンバー変数に合計値を持っておいて、セルのタップによってその合計値を足したり減らしたりするのは、整数だったらまだいいですが、小数などでは誤差がでるので、辞めたほうがいいです。毎回合計値を求める方がたぶん安全です。
|
9
8
|
|
9
|
+
また、おそらくセルの数を増やしてスクロールすると、チェックマークとセルの選択が一致しない可能性がありますので、`func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell`の中で選択状態を見てチェックマークの更新を行ってください。
|
10
|
+
|
11
|
+
ちなみにアクセサリータイプで自分でチェックマークを設定しなくても、標準機能としてチェックマークを出すこともできます。
|
12
|
+
参考:
|
13
|
+
[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)
|
14
|
+
|
10
15
|
----
|
11
16
|
|
12
17
|
以下、本題とは関係ありませんが、一つの情報は構造体やクラスにまとめるべきです。
|
3
もともと複数選択モードを利用しているようなので改善
answer
CHANGED
@@ -1,23 +1,14 @@
|
|
1
|
-
UITableView
|
1
|
+
UITableView自体の複数選択機能をオンにしているんですよね?
|
2
|
-
そちらを使えば、UITableView側が選択したセルの一覧を覚えているので、あとから選択されているセル一覧を取得するのは容易だったりします。
|
3
2
|
|
4
|
-
|
3
|
+
だったら
|
4
|
+
UITableViewのindexPathsForSelectedRowsを使えば、選択しているセルのIndexPath一覧が取れますので、
|
5
|
-
https://
|
5
|
+
https://developer.apple.com/documentation/uikit/uitableview/1614864-indexpathsforselectedrows
|
6
|
-
|
6
|
+
選択状態が変わったタイミングで、毎回合計値を求めればそれで終わりです。
|
7
7
|
|
8
|
-
|
8
|
+
なお、メンバー変数に合計値を持っておいて、セルのタップによってその合計値を足したり減らしたりするのは、整数だったらまだいいですが、小数などでは誤差がでるので、辞めたほうがいいです。毎回合計値を求める方がたぶん安全です。
|
9
|
-
この方針で行く場合
|
10
9
|
|
11
|
-
0. チェック状態をbool配列かSet型で自分で管理する(=メンバー変数にチェック状態をなんとかして保持する)
|
12
|
-
0. `func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell`でセルを生成する際にチェック状態を管理しているメンバー変数をもとにCellへチェック状態を復元
|
13
|
-
|
10
|
+
----
|
14
11
|
|
15
|
-
としてください。
|
16
|
-
|
17
|
-
あとは、3のタイミングで、「どのセルが選択されているか?」はメンバー変数を見ればわかりますし、「選択されているセルの価格がいくらか?」もself.priceArrayを見ればわかりますので、合計を求めて表示するだけです。
|
18
|
-
|
19
|
-
なお、メンバー変数に合計値を持っておいて、セルのタップによってその合計値を足したり減らしたりするのは、整数だったらまだいいですが、小数などでは誤差がでるので、辞めたほうがいいです。毎回合計値を求める方がたぶん安全です。
|
20
|
-
|
21
12
|
以下、本題とは関係ありませんが、一つの情報は構造体やクラスにまとめるべきです。
|
22
13
|
例えば「人」の情報として名前と年齢があり、複数人の情報を保持したい場合、
|
23
14
|
質問者さんは
|
2
1
answer
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
今回は質問者さんはセルのアクセサリータイプとしてチェックマークを表示していますので、
|
9
9
|
この方針で行く場合
|
10
10
|
|
11
|
-
0. チェック状態をbool配列かSet型で自分で管理する
|
11
|
+
0. チェック状態をbool配列かSet型で自分で管理する(=メンバー変数にチェック状態をなんとかして保持する)
|
12
12
|
0. `func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell`でセルを生成する際にチェック状態を管理しているメンバー変数をもとにCellへチェック状態を復元
|
13
13
|
0. セルタップでチェック状態を自分で更新(Cellとメンバー変数両方)
|
14
14
|
|
1
0
answer
CHANGED
@@ -5,10 +5,10 @@
|
|
5
5
|
https://stackoverflow.com/questions/33970807/how-to-select-multiple-rows-in-uitableview-in-edit-mode
|
6
6
|
(左に青丸のチェックマークが付きます)
|
7
7
|
|
8
|
-
|
8
|
+
今回は質問者さんはセルのアクセサリータイプとしてチェックマークを表示していますので、
|
9
9
|
この方針で行く場合
|
10
10
|
|
11
|
-
0. チェック状態を配列かSet型で自分で管理する
|
11
|
+
0. チェック状態をbool配列かSet型で自分で管理する
|
12
12
|
0. `func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell`でセルを生成する際にチェック状態を管理しているメンバー変数をもとにCellへチェック状態を復元
|
13
13
|
0. セルタップでチェック状態を自分で更新(Cellとメンバー変数両方)
|
14
14
|
|