###質問の概要
teratailさんのおかげでTableViewの表示が多彩になってきました。
従来第1画面はsectionなしのcellで、cell番号もひとつの通し番号でした。section付きの図入りcellに変更しましたら、第2画面であるTableView02の表示内容がずれてしまいました。
つまり、sectionで区切られたものですから、タップされた行番号がくるい、第2画面の表示がくるってしまいました。
###関係スクリーンショット3枚
従来のセクションなしの第1画面
###発生した現象
第2画面のTableView02では、第1画面のView Controllerでの選択セル番号を読んで、
texts00からtexts06までのArray記載のテキストを表示していました。
従って、section入りのcell番号は
00,01,02,03,04,05,06ではなく、
section01 の00,01,02
section02 の00,01,02,03
というcell番号に対応したテキストが反映されてしまいました。
つまり、動画の説明とテキストの説明の3項目が同じ画面になってしまいました。
section02のcell03をタップするとsection02のcell01が表示されました。
###対策として実施したコーディング
if文を使いsectionごとにcell番号を指示し、「テキストによる説明」のところにはcell番号に+3を入れました。
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! CustomCell //cell.label1.text = texts[selectedIndexPathInViewController.row][indexPath.row] //参考→ section == 0 は赤帯の注釈につかったのでスキップしました。 ////「テキストによる説明」部分のcell番号設定 if selectedIndexPathInViewController.section == 1 { //一段目のために選ばれた行番号をプリントする print("タップされた section1の インデックスパス:\(indexPath.row)") cell.label1.text = texts[selectedIndexPathInViewController.row][indexPath.row] cell.label2.text = subtexts[selectedIndexPathInViewController.row][indexPath.row] //二段目のために選ばれた行番号をプリントする print("タップされた section1の2段用 インデックスパス:\(indexPath.row)") print("section1がタップされた") } //「テキストによる説明」部分のcell番号設定 if selectedIndexPathInViewController.section == 2 { //タップされた第1画面のcellに応じた表示 cell.label1.text = texts[selectedIndexPathInViewController.row][indexPath.row+3] cell.label2.text = subtexts[selectedIndexPathInViewController.row][indexPath.row+2] //参考→ 本来はrow+3とすべきところ、row+2 としたのは、ずれを生じさせて、コードが機能しているか確かめるためのものです。 print("section2がタップされた") //二段目のために選ばれた行番号をプリントする print("section2がタップされ、1段目の番号:\(indexPath.row+3)") print("section2がタップされ、2段目の番号:\(indexPath.row+2)") } else{ return cell }
###発生したエラー
ビルドは成功するのですが、第1画面の下段の「テキストによる説明」をタップすると
fatal error: Index out of range
がでて落ちます。
なお、上記コードのindexPath.row+3 や indexPath.row+2 の+3 と+2を消すとエラーにならず表示されますが、表示にずれは生じています。
###コードに書いたprint結果からの考察
下記のスクリーンショットのごとく、
section01(動画のセクション)をタップした場合はエラーはでず、printも正常に機能しています。
なお、1行目のタップされたセルのインデックスパス:0は View Controllerのコードによるものです。
section02(テキストのセクション)をタップすると、下記のスクリーンショットのごとくなぜか何度もタップしたような表示がでて、最後にfatal error: Index out of rangeが表示されます。
###質問
一度しかタップしないのに何度もタップしたような表示がでて、最後にfatal error: Index out of rangeが表示されます。なぜでしょうか。どう対処したらよいでしょうか。
長いコード付きの質問で恐縮ですが、教えてください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/09/21 00:14