質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

3145閲覧

テーブルビューに2段のラベルを設けてテキストを表示する方法⇒2段目の行がずれる不具合

Tomzy

総合スコア104

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2016/06/13 07:43

編集2016/06/13 07:54

イメージ説明**第1画面より第2画面に遷移したとき、TableView02の2段目のlabel2の表示ヶ所が1行ずれて最初の行がブランクになる不具合。
**
まだ、不具合が続いているので、再度質問します。よろしくお願いします。

AAA
TableView02のコードを元に戻し

cell.label2.text = subtexts[selectedIndexPathInViewController.row][indexPath.row]

Xcodeクリーン、シミュレーターのリセット、XcodeのDeriveDataのProjectおよびModuleCodeの削除、ゴミ箱を空に、Xcodeの終了、Macの再起動をやって,再度Xcodeをビルドしましたが、状況は変わりません。

BBB
添付画像により状況を説明します。
第1画面は正常です。
イメージ説明

第2画面の1:
第1画面の2行目をタップした場合表示されますが、第2画面の1行目の2段目がブランクになっていて2行目にずれて表示されています。

第2画面の2:
第1画面の3行目をタップした場合表示されますが、第2画面の1行目の2段目がブランクになっていて2行目にずれて表示されています。
イメージ説明

第2画面の3:
不思議なことに上記2の画面の2行目をタップすると2行目に2段目が消えます。3行目は変わらずです。

イメージ説明

CCC
関係fileのコードを記載します。なお、字数制限があるので//中略 を入れます。

// ViewController.swift

import

1 2import iAd 3 4class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate{ 5 @IBOutlet var tableView01: UITableView! 6 7 override func viewDidLoad() { 8 super.viewDidLoad() 9 10 // Prepare interstitial Ad 11 UIViewController.prepareInterstitialAds() 12 13 // Show iAd 14 self.canDisplayBannerAds = true 15 16 tableView01.delegate = self 17 tableView01.dataSource = self 18 19 } 20 21// セルに表示するテキスト 22let texts = ["動画:動画の見方", 23 "動画:電話", 24 "動画:カレンダー", 25 //中略] 26 27 //テーブルビューのタイトルを表示 28 func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { 29 let label = UILabel(frame: CGRect(x:0, y:0, width: tableView.bounds.width, height: 50)) 30 31 // 文字位置 32 label.textAlignment = NSTextAlignment.Center 33 34 // 文字サイズ 35 label.font = UIFont.italicSystemFontOfSize(17) 36 37 // 背景色 38 label.backgroundColor = UIColor.redColor() 39 40 // 文字色 41 label.textColor = UIColor.whiteColor() 42 43 // 表示される文字 44 label.text = "ご希望の項目を触ってください" 45 46 return label 47 } 48 49 50// セルの行数 51func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 52 return texts.count 53} 54 55// セルの内容を変更 56func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 57 let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "cell01") 58 59 cell.textLabel?.text = texts[indexPath.row] 60 61 // 文字色変更 62 cell.textLabel?.textColor = UIColor.blackColor() 63 64 // 文字サイズ変更 65 //cell.textLabel?.font = UIFont.systemFontOfSize(30) 66 // 文字を太字に変更 67 cell.textLabel?.font = UIFont.boldSystemFontOfSize(25) 68 69 // cellの背景を透過 70 cell.backgroundColor = UIColor.whiteColor() 71 // cell内のcontentViewの背景を透過 72 //cell.contentView.backgroundColor = UIColor.whiteColor() 73 74 // チェックマークをつける 75 //cell.accessoryType = UITableViewCellAccessoryType.Checkmark 76 return cell 77 78 } 79 80//テーブルビューのセルがタップされた処理 81 var selectedIndexPath: NSIndexPath! 82 83 func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 84 85 //セルのインデックスパス番号を出力 86 87 print("タップされたセルのインデックスパス:\(indexPath.row)") 88 89 selectedIndexPath = indexPath 90 91 //cellが選択された場合 92 //TableView02へ遷移するためにsegueを呼び出す 93 94 //performSegueWithIdentifier("toTableView02", sender: self) 95 self.performSegueWithIdentifier("toTableView02", sender: indexPath) 96 97 } 98 99 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) { 100 if (segue.identifier == "toTableView02") { 101 102 let subVC = (segue.destinationViewController as? TableView02)! 103 subVC.selectedIndexPathInViewController = selectedIndexPath 104 } 105} 106} 107

// TableView02.swift

import

1 2import iAd 3 4 5 class TableView02: UIViewController, UITableViewDataSource, UITableViewDelegate { 6 @IBOutlet var tableView02: UITableView! 7 8 var selectedIndexPathInViewController: NSIndexPath! 9 10 let texts00 = ["01:自動で始まり終わる", 11 "02:途中で止める方法", 12 //中略] 13 14 let texts01 = ["01:電話番号で発信", 15 "02:「連絡先」の登録", 16 "03:「よく使う項目」", 17 //中略] 18 19 let texts02 = ["01:いろいろな画面", 20 "02:イベントの記入方法", 21 "03:上記全動画の通し映写"] 22 23 //中略 24 let subtexts00 = ["動画の基本的な見方", 25 "", 26 "", 27 "元の画面に戻る方法", 28 //中略] 29 30 let subtexts01 = ["「キーパッド」という数字盤を使う", 31 "住所録を使って発信", 32 "よく使う電話番号の登録", 33 //中略] 34 35 let subtexts02 = ["年画面、月画面、日画面、週画面、イベント(予定)画面", 36 "新規イベント、既存イベントの修正、削除", 37 ""] 38 39 let subtexts03 = //中略 40 41 //teratail助言2追加 42 var texts : [[String]]! 43 var subtexts : [[String]]! 44 45 override func viewDidLoad() { 46 super.viewDidLoad() 47 48 49 // Prepare interstitial Ad 50 UIViewController.prepareInterstitialAds() 51 52 // Show iAd 53 self.canDisplayBannerAds = true 54 55 //self.setupFriends() 56 57 58 texts = [texts00,texts01,texts02,texts03,texts04,texts05,texts06,texts07,texts08] 59 subtexts = [subtexts00,subtexts01,subtexts02,subtexts03,subtexts04,subtexts05,subtexts06,subtexts07,subtexts08] 60 61 tableView02.delegate = self 62 tableView02.dataSource = self 63 64 let nib = UINib(nibName: "CustomCell", bundle: nil) 65 tableView02.registerNib(nib, forCellReuseIdentifier: "Cell") 66 67 } 68 69 70 func tableView(tableView: UITableView, numberOfRowsInSection section:Int) -> Int { 71 return texts[selectedIndexPathInViewController.row].count 72 } 73 74 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 75 76 77 //teratailTake One さんのコメントアドバイスにより修正 78 //var cell = tableView.dequeueReusableCellWithIdentifier("Cell") as? CustomCell 79 80 81 let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! CustomCell 82 cell.label1.text = exts[selectedIndexPathInViewController.row][indexPath.row] 83 84 //一段目のために選ばれた行番号をプリントする 85 print("タップされた 1段用 インデックスパス:\(indexPath.row)") 86 cell.label2.text = subtexts[selectedIndexPathInViewController.row][indexPath.row] 87 88 //二段目のために選ばれた行番号をプリントする 89 print("タップされた 2段用 インデックスパス:\(indexPath.row)") 90 91 return cell 92 } 93 }

CustomCell.swift

import UIKit class CustomCell: UITableViewCell { override func awakeFromNib() { super.awakeFromNib() // Initialization code } @IBOutlet weak var label1: UILabel! @IBOutlet weak var label2: UILabel! override func setSelected(selected: Bool, animated: Bool) { super.setSelected(selected, animated: animated) } }

// Text.swift

import

1 2class Test : NSObject{ 3 var label1:String 4 var label2:String 5 6 init(label1:String,label2:String){ 7 self.label1 = label1 8 self.label2 = label2 9 10 } 11}

DDD
storyboardの結合を現す
ViewControllerクラスのスクリーンショットと
TableView02クラスのスクリーンショットを添付します。

イメージ説明
イメージ説明

CustomCellのxibのスクリーンショットも添付します。
イメージ説明

EEE
その他ご参考事項を記載します。
第1画面のセルの内容はコードで設定しています。
第2画面のセルの内容はxibで設定しました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

質問の「第2画面の1」の説明箇所に図が貼られておらず、「第2画面の2」の箇所に貼られている図が「第2画面の1」の説明と一致していて、「第2画面の2」の説明に相当する図は、この質問の最初に貼られている図のように見えるのですが、正しい位置に図が貼られているか確認してみてください。
それと、前回の質問の最後のコメントの時に、
print("タップされた 1段用 インデックスパス:\(indexPath.row)")

print("タップされた 2段用 インデックスパス:\(indexPath.row)")
のprintが表示されないと言っていたと思うのですが、
TableView02を表示した時に、今でもこのprintは表示されないのですか?

もう少し後でじっくり見れる時間ができたらまたコメントします。


(6/13 19:00追加回答)

カスタムセルのxib画面をみたら妙に高さが高いですね。
これ、カスタムセルの高さが高すぎて、というか2段目のラベル(label2)の表示位置が下すぎて、次のセルに重なって表示されているだけのような気がします。カスタムセルの高さとセル内のlabel2の配置位置の定義を見直すことをお勧めします。

投稿2016/06/13 08:28

編集2016/06/13 10:01
TakeOne

総合スコア6299

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Tomzy

2016/06/13 09:06

早速レスポンスありがとうございました。 投稿時から画像が上手く貼れずに困りました。そこで追加も試みたのですが、それも上手く貼れませんでした。 第1画面は貼れています。 第2画面の1: はブランクになっています。 第2画面の2: には第2画面の1の画像が貼ってあります。 第2画面の3: は意図どおり貼られています。 従って 第2画面の1: は第2画面の2: とご理解ください。 第2画面の2: とは第2画面の3 の2行目の2段目にも文字があったとご理解ください。 printについてご報告が遅れてすいません。ずっと表示されていないと思っていました。改めて、今見ましたら下記のとおり表示されていました。 これを見るとindexPath.rowは正常のようですね。 タップされたセルのインデックスパス:1 タップされた 1段用 インデックスパス:0 タップされた 2段用 インデックスパス:0 タップされた 1段用 インデックスパス:1 タップされた 2段用 インデックスパス:1 タップされた 1段用 インデックスパス:2 タップされた 2段用 インデックスパス:2 タップされた 1段用 インデックスパス:3 タップされた 2段用 インデックスパス:3 タップされた 1段用 インデックスパス:4 タップされた 2段用 インデックスパス:4 タップされた 1段用 インデックスパス:5 タップされた 2段用 インデックスパス:5 タップされた 1段用 インデックスパス:5 タップされた 2段用 インデックスパス:5 タップされたセルのインデックスパス:2 タップされた 1段用 インデックスパス:0 タップされた 2段用 インデックスパス:0 タップされた 1段用 インデックスパス:1 タップされた 2段用 インデックスパス:1 タップされた 1段用 インデックスパス:2 タップされた 2段用 インデックスパス:2 タップされたセルのインデックスパス:0 タップされた 1段用 インデックスパス:0 タップされた 2段用 インデックスパス:0 タップされた 1段用 インデックスパス:1 タップされた 2段用 インデックスパス:1 タップされた 1段用 インデックスパス:2 タップされた 2段用 インデックスパス:2 タップされた 1段用 インデックスパス:3 タップされた 2段用 インデックスパス:3 タップされた 1段用 インデックスパス:4 タップされた 2段用 インデックスパス:4 タップされた 1段用 インデックスパス:5 タップされた 2段用 インデックスパス:5 タップされた 1段用 インデックスパス:5 タップされた 2段用 インデックスパス:5 タップされたセルのインデックスパス:1 タップされた 1段用 インデックスパス:0 タップされた 2段用 インデックスパス:0 タップされた 1段用 インデックスパス:1 タップされた 2段用 インデックスパス:1 タップされた 1段用 インデックスパス:2 タップされた 2段用 インデックスパス:2 タップされた 1段用 インデックスパス:3 タップされた 2段用 インデックスパス:3 タップされた 1段用 インデックスパス:4 タップされた 2段用 インデックスパス:4 タップされた 1段用 インデックスパス:5 タップされた 2段用 インデックスパス:5 タップされた 1段用 インデックスパス:5 タップされた 2段用 インデックスパス:5 タップされたセルのインデックスパス:2 タップされた 1段用 インデックスパス:0 タップされた 2段用 インデックスパス:0 タップされた 1段用 インデックスパス:1 タップされた 2段用 インデックスパス:1 タップされた 1段用 インデックスパス:2 タップされた 2段用 インデックスパス:2 タップされたセルのインデックスパス:2 タップされた 1段用 インデックスパス:0 タップされた 2段用 インデックスパス:0 タップされた 1段用 インデックスパス:1 タップされた 2段用 インデックスパス:1 タップされた 1段用 インデックスパス:2 タップされた 2段用 インデックスパス:2 タップされたセルのインデックスパス:0 タップされた 1段用 インデックスパス:0 タップされた 2段用 インデックスパス:0 タップされた 1段用 インデックスパス:1 タップされた 2段用 インデックスパス:1 タップされた 1段用 インデックスパス:2 タップされた 2段用 インデックスパス:2 タップされた 1段用 インデックスパス:3 タップされた 2段用 インデックスパス:3 タップされた 1段用 インデックスパス:4 タップされた 2段用 インデックスパス:4 タップされた 1段用 インデックスパス:5 タップされた 2段用 インデックスパス:5 よろしくお願いします。
TakeOne

2016/06/13 10:02

回答を追加しました。label2の配置位置が下すぎて、次のセルに重なって表示されているような気がします。
Tomzy

2016/06/14 04:10

Take One さん ありがとうございました。解決しました。 第2画面のTableView02をstoryboard上高さが100 customになっているのはそのままにしました。 CustomCell.xib上AutoLayoutでlabel1の左上右を0 hを50 label2を左下右を0 高さを50に設定しました。 3.5インチから5.5インチiPad何れも意図どおりの画面になりました。 下段のlabel2のテキストが幅一杯になった時も自動で改行されています。 第2画面の行をタップした時下段の文字が消える不具合もなくなりました。 後から参照するひとの為にも、成功画面とstoryboard xib設定画面のスクリーンショットを添付したいのですが、コメント欄ではできず断念しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問