回答編集履歴

3

訂正

2020/04/26 09:32

投稿

退会済みユーザー
test CHANGED
@@ -42,7 +42,7 @@
42
42
 
43
43
  追記:こんな流れかな〜
44
44
 
45
-
45
+ segmentedControlの値が変更されると、didSet内が実行されるので、labelの値を変えるなりそこですればリアルタイム?に値を全体の値に反映させることができると思います。
46
46
 
47
47
 
48
48
 

2

追記

2020/04/26 09:32

投稿

退会済みユーザー
test CHANGED
@@ -35,3 +35,125 @@
35
35
  セルが使い回されているので、SegmentedControlの状態を保持する配列かなにかに値をもたせて、そちらをカウントしないとうまく行かないんじゃないかな?
36
36
 
37
37
  それとSegmentedControlの初期値(値なし/はい/いいえ)によってコードが変わってくると思います。
38
+
39
+
40
+
41
+ ---
42
+
43
+ 追記:こんな流れかな〜
44
+
45
+
46
+
47
+
48
+
49
+ ```swift
50
+
51
+ enum SegmentedControlStatus: Int {
52
+
53
+ case none = -1
54
+
55
+ case yes = 0
56
+
57
+ case no = 1
58
+
59
+ }
60
+
61
+
62
+
63
+ protocol TableViewCellDelegate: AnyObject {
64
+
65
+ func valueChanged(cell: UITableViewCell, value: SegmentedControlStatus)
66
+
67
+ }
68
+
69
+
70
+
71
+ class CustomCell: UITableViewCell {
72
+
73
+
74
+
75
+ weak var tableViewCellDelegate: TableViewCellDelegate?
76
+
77
+
78
+
79
+ @IBOutlet weak var segmentedControl: UISegmentedControl!
80
+
81
+
82
+
83
+ func segmentedControlValueChanged(_ sender: UISegmentedControl) {
84
+
85
+ let value
86
+
87
+ = SegmentedControlStatus(rawValue: sender.selectedSegmentIndex) ?? .none
88
+
89
+
90
+
91
+ tableViewCellDelegate?.valueChanged(cell: self, value: value)
92
+
93
+ }
94
+
95
+
96
+
97
+ }
98
+
99
+
100
+
101
+
102
+
103
+ class ViewController: UIViewController, UITableViewDateSource, TableViewCellDelegate {
104
+
105
+
106
+
107
+ var numOfYes: Int = 0
108
+
109
+ var numOfNo : Int = 0
110
+
111
+
112
+
113
+ var segmentedControlStatuses = [SegmentedControlStatus]() {
114
+
115
+ didSet {
116
+
117
+ if oldValue != segmentedControlStatuses {
118
+
119
+ numOfYes = segmentedControlStatuses.filter { $0 == .yes }.count
120
+
121
+ numOfNo = segmentedControlStatuses.filter { $0 == .no }.count
122
+
123
+ }
124
+
125
+ }
126
+
127
+ }
128
+
129
+
130
+
131
+ // CellForRowAt内
132
+
133
+ cell.tableViewCellDelegate = self
134
+
135
+ let segmentedControlStatsu = segmentedControlStatuses[indexPath.row]
136
+
137
+ cell.segmentedControl.selectedSegmentIndex = segmentedControlStatsu
138
+
139
+
140
+
141
+
142
+
143
+
144
+
145
+ func valueChanged(cell: UITableViewCell, value: SegmentedControlStatus) {
146
+
147
+ guard let index = tableView.indexPath(for: cell)?.row else { return }
148
+
149
+
150
+
151
+ segmentedControlStatuses[index] = value
152
+
153
+
154
+
155
+ }
156
+
157
+ }
158
+
159
+ ```

1

訂正

2020/04/26 09:30

投稿

退会済みユーザー
test CHANGED
@@ -1,3 +1,7 @@
1
+ 適当に書くと↓みたくなると思うけど、
2
+
3
+
4
+
1
5
  ```swift
2
6
 
3
7
  @objc func segmentValueChanged(_ sender: UISegmentedControl) {
@@ -25,3 +29,9 @@
25
29
  }
26
30
 
27
31
  ```
32
+
33
+
34
+
35
+ セルが使い回されているので、SegmentedControlの状態を保持する配列かなにかに値をもたせて、そちらをカウントしないとうまく行かないんじゃないかな?
36
+
37
+ それとSegmentedControlの初期値(値なし/はい/いいえ)によってコードが変わってくると思います。