回答編集履歴
2
回答を修正
test
CHANGED
@@ -1,36 +1,38 @@
|
|
1
|
-
上記二つの回答でピンときているかはわかりませんが、
|
1
|
+
~~上記二つの回答でピンときているかはわかりませんが、~~
|
2
|
-
|
2
|
+
|
3
|
-
サンプルコードを作って見ました。
|
3
|
+
~~サンプルコードを作って見ました。~~
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
|
5
|
+
|
6
|
+
|
7
|
-
確かにアニメーションが必要なら、insertRows/deleteRowsですし、
|
7
|
+
~~確かにアニメーションが必要なら、insertRows/deleteRowsですし、~~
|
8
|
-
|
8
|
+
|
9
|
-
不要であれば、reloadDataで更新をかければ解決すると思います。
|
9
|
+
~~不要であれば、reloadDataで更新をかければ解決すると思います。~~
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
|
11
|
+
|
12
|
+
|
13
|
-
都合上、コードはつなげて書いてあります。
|
13
|
+
~~都合上、コードはつなげて書いてあります。~~
|
14
|
-
|
14
|
+
|
15
|
-
viewcontrollerにベタ張りすれば動くと思います。
|
15
|
+
~~viewcontrollerにベタ張りすれば動くと思います。~~
|
16
|
-
|
17
|
-
|
18
|
-
|
16
|
+
|
17
|
+
|
18
|
+
|
19
|
-
きれいに整えたいなら、コメントにも書きましたが、
|
19
|
+
~~きれいに整えたいなら、コメントにも書きましたが、~~
|
20
|
-
|
20
|
+
|
21
|
-
別ファイルに分けることをお勧めします。
|
21
|
+
~~別ファイルに分けることをお勧めします。~~
|
22
|
-
|
23
|
-
|
24
|
-
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
-
また、tableviewのeditingに関してはあまり考えずに、そのまま使ったので、
|
25
|
+
~~また、tableviewのeditingに関してはあまり考えずに、そのまま使ったので、~~
|
26
|
-
|
26
|
+
|
27
|
-
すっきりとしてないかもしれません。
|
27
|
+
~~すっきりとしてないかもしれません。~~
|
28
|
-
|
29
|
-
|
30
|
-
|
28
|
+
|
29
|
+
|
30
|
+
|
31
|
-
個人的にはstoryboardやxibファイルなどをうまく組み合わせるのが好きです。
|
31
|
+
~~個人的にはstoryboardやxibファイルなどをうまく組み合わせるのが好きです。~~
|
32
|
-
|
32
|
+
|
33
|
-
こういう場ではコードのみの方が、動くサンプルを渡せて便利ですけどね。
|
33
|
+
~~こういう場ではコードのみの方が、動くサンプルを渡せて便利ですけどね。~~
|
34
|
+
|
35
|
+
|
34
36
|
|
35
37
|
|
36
38
|
|
@@ -341,3 +343,113 @@
|
|
341
343
|
}
|
342
344
|
|
343
345
|
```
|
346
|
+
|
347
|
+
|
348
|
+
|
349
|
+
=========================================
|
350
|
+
|
351
|
+
2019/10/30 更新
|
352
|
+
|
353
|
+
|
354
|
+
|
355
|
+
お恥ずかしながら、tyobigorouさんに指摘され気付いたんですが、
|
356
|
+
|
357
|
+
deleteRowによるindexPathとUIButtonのtagのズレ問題の解決をできてなかったので
|
358
|
+
|
359
|
+
追記します。
|
360
|
+
|
361
|
+
|
362
|
+
|
363
|
+
アニメーションが必要ということで、insertRows/deleteRowsを使う方向で、
|
364
|
+
|
365
|
+
deleteRowsするとindexPathが減り、tagはそのままとなって確実にズレますね。
|
366
|
+
|
367
|
+
|
368
|
+
|
369
|
+
reloadData()が頭にあったので、上記のサンプルではそこを考慮できてなかったです。
|
370
|
+
|
371
|
+
cellForRowAt以外でdequeueReusableCellを呼び出すのはおすすめできないので、
|
372
|
+
|
373
|
+
tagを更新するのは、reloadData()で行う以外のいい方法は思いつかないです。
|
374
|
+
|
375
|
+
|
376
|
+
|
377
|
+
~~tyobigorouさんも言ってますが、UIButtonのtagを使わず代わりに、~~
|
378
|
+
|
379
|
+
~~普通にindexPathを利用して行うのがいいのではないでしょうか。~~
|
380
|
+
|
381
|
+
|
382
|
+
|
383
|
+
tagを使わない方法としては、
|
384
|
+
|
385
|
+
以下に修正したコードを載せて見ます。
|
386
|
+
|
387
|
+
cellForRowatでのcell.button.tag = indexPath.rowは不要となります。
|
388
|
+
|
389
|
+
メインはcustomCellのボタンのfunctionとCustomCellDelegateの部分を変更しました。
|
390
|
+
|
391
|
+
|
392
|
+
|
393
|
+
```Swift
|
394
|
+
|
395
|
+
|
396
|
+
|
397
|
+
extension ViewController: CustomCellDelegate {
|
398
|
+
|
399
|
+
func buttonPressed(word: String) {
|
400
|
+
|
401
|
+
if mode == 1 {
|
402
|
+
|
403
|
+
read(word: word)
|
404
|
+
|
405
|
+
}
|
406
|
+
|
407
|
+
}
|
408
|
+
|
409
|
+
}
|
410
|
+
|
411
|
+
|
412
|
+
|
413
|
+
// ~~~~間省略
|
414
|
+
|
415
|
+
|
416
|
+
|
417
|
+
@objc func buttonTapped() {
|
418
|
+
|
419
|
+
if let word = self.label.text {
|
420
|
+
|
421
|
+
self.delegate?.buttonPressed(word: word)
|
422
|
+
|
423
|
+
}
|
424
|
+
|
425
|
+
}
|
426
|
+
|
427
|
+
}
|
428
|
+
|
429
|
+
|
430
|
+
|
431
|
+
// MARK: -- ここから別ファイルCusotmCellDelegate.swiftなどが好ましい、import UIKitは不要
|
432
|
+
|
433
|
+
|
434
|
+
|
435
|
+
protocol CustomCellDelegate {
|
436
|
+
|
437
|
+
func buttonPressed(word: String)
|
438
|
+
|
439
|
+
}
|
440
|
+
|
441
|
+
|
442
|
+
|
443
|
+
```
|
444
|
+
|
445
|
+
|
446
|
+
|
447
|
+
indexPathをうまく渡す方法は思いつかなかったので、
|
448
|
+
|
449
|
+
labelに表示されているstringを直接渡す方法にしてみました。
|
450
|
+
|
451
|
+
|
452
|
+
|
453
|
+
これなら、元データを変更せず(wordsでwordを削除せず)に、
|
454
|
+
|
455
|
+
表示のみ変更(deleteRowのみした)場合にもきちんと該当の単語を読み上げてくれると思います。
|
1
修正
test
CHANGED
@@ -230,7 +230,13 @@
|
|
230
230
|
|
231
231
|
// 上記は、CustomCellのメンバ変数delegate(CustomCellDelegate) を self(ViewController)で記述するという設定です。
|
232
232
|
|
233
|
-
// すぐ下にextensionで書いてます。
|
233
|
+
// なので、CustomCellDelegateをすぐ下にextensionで書いてます。
|
234
|
+
|
235
|
+
// 要はボタンを押したというfuncをdelegateで渡すことにより、
|
236
|
+
|
237
|
+
// AVSpeechを各cellで作成せずに済んでますし,
|
238
|
+
|
239
|
+
// 直接、wordsにアクセスできてシンプルになってます。
|
234
240
|
|
235
241
|
return cell
|
236
242
|
|