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

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

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

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

Q&A

解決済

1回答

3104閲覧

xibのlabelが表示されない

ILoveApple

総合スコア8

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

0グッド

0クリップ

投稿2019/01/14 07:19

編集2019/01/20 02:06

前提・実現したいこと

tableViewを使ってToDoアプリを作りたくて、xibでカスタムセルを作成しました。
しかしiOS Simulatorにビルドするとセルは生成されるもののラベルが表示されません(セルは出てきてもLabelが表示されない、すなわちセルは削除できるのでセルはあるはずなのに文字がないということです)。

該当のソースコード(TodoTableViewController)

Swift

1import UIKit 2 3class TodoTableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 4 5 @IBOutlet var tableView: UITableView! 6 @IBOutlet weak var todoLabel: UILabel! 7 8 9 var resultArray = [String]() 10 var dateArray = [String]() 11 12 override func viewDidLoad() { 13 super.viewDidLoad() 14 15 tableView.delegate = self 16 tableView.dataSource = self 17 18 self.tableView.register(UINib(nibName: "TodoTableViewCell", bundle: nil), forCellReuseIdentifier: "customCell") 19 20 } 21 22 override func viewWillAppear(_ animated: Bool) { 23 super.viewWillAppear(animated) 24 25 if UserDefaults.standard.object(forKey: "array") != nil { 26 27 resultArray = UserDefaults.standard.object(forKey: "array") as! [String] 28 } 29 30 tableView.reloadData() 31 32 } 33 34 func numberOfSections(in tableView: UITableView) -> Int { 35 // #warning Incomplete implementation, return the number of sections 36 return 1 37 } 38 39 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 40 41 return self.resultArray.count 42 } 43 44 45 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 46 47 let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) 48 49 todoLabel?.text = resultArray[indexPath.row] 50 51 return cell 52 } 53 54 55 func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) { 56 if editingStyle == .delete { 57 58 resultArray.remove(at: indexPath.row) 59 60 UserDefaults.standard.set(resultArray, forKey: "array") 61 62 //dateArray.remove(at: indexPath.row) 63 64 //UserDefaults.standard.set(dateArray, forKey: "date") 65 66 tableView.reloadData() 67 } 68 69 } 70 71 72 73 74 75 76} 77

Swift

1 2 import UIKit 3 4class AddViewController: UIViewController { 5 6 @IBOutlet weak var textField: UITextField! 7 8 var array = [String]() 9 //var dateTimeArray = [String]() 10 11 override func viewDidLoad() { 12 super.viewDidLoad() 13 14 // Do any additional setup after loading the view. 15 } 16 17 @IBAction func add(_ sender: Any) { 18 19 if UserDefaults.standard.object(forKey: "array") != nil { 20 21 array = UserDefaults.standard.object(forKey: "array") as! [String] 22 } 23 24 array.append(textField.text!) 25 26 UserDefaults.standard.set(array, forKey: "array") 27 28 29 30 31 /* 32 if UserDefaults.standard.object(forKey: "date") != nil { 33 34 dateTimeArray = UserDefaults.standard.object(forKey: "date") as! [String] 35 36 } 37 38 //https://qiita.com/gonsee/items/d3fb641914d2ca45e858 39 let date = Date() 40 41 //そのデバイスがある地域の時刻を取得 42 guard let formatString = DateFormatter.dateFormat(fromTemplate: "yyyy/MM/dd HH:mm", options: 0, locale: Locale.current) else { fatalError() } 43 44 let dateFormatter = DateFormatter() 45 dateFormatter.dateFormat = formatString 46 47 48 49 let dateString = dateFormatter.string(from: date) 50 51 dateTimeArray.append(dateString) 52 53 //"01/02/2019, 22:29"のようになる 54 UserDefaults.standard.set(dateTimeArray,forKey: "date") 55 */ 56 57 58 self.navigationController?.popViewController(animated: true) 59 60 } 61 62 //キーボード以外に触れるとキーボードが閉じる 63 override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 64 self.view.endEditing(true) 65 } 66 67 //AddViewを開いた時、キーボードも開く 68 override func viewDidAppear(_ animated: Bool) { 69 super.viewDidAppear(animated) 70 71 textField.becomeFirstResponder() 72 } 73 74 75 76 77} 78

Swift

1import UIKit 2 3class TodoTableViewCell: UITableViewCell { 4 5 @IBOutlet weak var label: UILabel! 6 @IBOutlet weak var dateLabel: UILabel! 7 8 9 override func awakeFromNib() { 10 super.awakeFromNib() 11 // Initialization code 12 } 13 14 override func setSelected(_ selected: Bool, animated: Bool) { 15 super.setSelected(selected, animated: animated) 16 17 // Configure the view for the selected state 18 } 19 20 21 22 23}

試したこと

selfを付けたり丸1日かけて調べましたがわかりませんでした

補足情報(FW/ツールのバージョンなど)

AddViewでtextFieldの内容をUserDefaultsのarrayに入れています
Swift, Xcode, macOSはいずれも最新です。
Cellはxibで作りました

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

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

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

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

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

fuzzball

2019/01/15 00:50

「iPhoneにビルドすると」というのはどういう意味でしょうか?iPadだと正しく表示されるのでしょうか?
fuzzball

2019/01/15 00:52

「セルは生成される」の根拠を書いて下さい。あと、カスタムセルのコードも書いて下さい。
fuzzball

2019/01/15 00:55

todoLabelは何のアウトレットなのでしょうか?(カスタムセル上のラベルに見えませんが)
ILoveApple

2019/01/20 02:07

回答を見るのに遅くなってしまい申し訳ございませんでした。 質問内容を編集しましたので、もう1度見ていただけないでしょうか。
guest

回答1

0

ベストアンサー

todoLabelは TodoTableViewControllerのViewであり、cellの表示領域にはありません。
cellで表示したい文字列は、cell内のLabelに設定します。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) // × todoLabel?.text = resultArray[indexPath.row] cell.label?.text = resultArray[indexPath.row] cell.dateLabel?.text = resultArray[indexPath.row] return cell }

投稿2019/01/22 09:35

dsuzuki

総合スコア1682

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

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

ILoveApple

2019/01/24 02:24

回答ありがとうございます。 cell.label?.text = resultArray[indexPath.row] と書いてもValue of type 'UITableViewCell' has no member 'label'; did you mean 'layer'?とエラーが発生してしまいます。 これは私の設定で何か足りないものがあるのでしょうか。
fuzzball

2019/01/24 02:31

cell を TodoTableViewCell にキャストして下さい。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問