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

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

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

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

Swift

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

Q&A

解決済

2回答

4164閲覧

TableViewのcell.contentView.addSubviewした値の参照の仕方について

P-san

総合スコア21

Xcode

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

Swift

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

0グッド

0クリップ

投稿2017/01/18 02:04

###前提・実現したいこと
TableViewのcell.contentView.addSubview()でaddした値の変更を
TableView.reloadRows(at: [IndexPath(row: 0, section: 0)], with: .automatic)
などで更新せずに変更する方法がわかりません。

具体的には、デイトピッカーで選択された値をTableViewのcell.contentView.addSubview(label)でaddされたlabelに表示したいです。Cellの更新をかけてしまうと不自然な動作になってしまったので、避けたいです。

よろしくお願いします。

###該当のソースコード

Swift

1 2// TableViewDataSourceClass 3 4// indexPath [0 , 0]がDatePickerがあるCellです。 5 6 // 各行に表示するセルを返す 7 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 8 let cell = UITableViewCell(style: .subtitle, reuseIdentifier: "cell") 9 cell.textLabel?.text = cellTxtList[indexPath.section][indexPath.row] 10 11 // TextField作成 ===========================================================================↓ 12 mainTxtField = UITextField(frame: CGRect(x: 80, y: 25, width: screen - 170, height: 20)) 13 mainTxtField.text = data[indexPath.section][indexPath.row] 14 mainTxtField.textAlignment = NSTextAlignment.center 15 mainTxtField.tintColor = UIColor.blue 16 mainTxtField.tag = indexPath.row 17 // TextField作成 ===========================================================================↑ 18 19 if indexPath == [0 , 0] { 20 // デイトピッカーと関連付け 21 mainTxtField.inputView = myDatePicker 22 mainTxtField.isHidden = true 23 // デイトピッカーの値表示Label作成 ===========================================================================↓ 24 label = UILabel(frame: CGRect(x: 80, y: 25, width: screen - 170, height: 20)) 25 label?.text = TicketsData[indexPath.section][indexPath.row] 26 label?.textAlignment = NSTextAlignment.center 27 label?.tag = indexPath.row 28 cell.contentView.addSubview(Label!) 29 // デイトピッカーの値表示Label作成 ===========================================================================↑ 30 } 31 // else {} 32 33 return cell 34 }

Swift

1 2// DatePickerClass 3 4// デイトピッカーの記述 =======================================================↓ 5 // DatePickerの値が変更された際に呼ばれる. 6 internal func onDidChangeDate(sender: UIDatePicker){ 7 // フォーマットを生成. 8 let myDateFormatter: DateFormatter = DateFormatter() 9 myDateFormatter.dateFormat = "yyyy年MM月dd日" 10 // 日付をフォーマットに則って取得(データ) 11 let mySelectedDate: NSString = myDateFormatter.string(from: sender.date) as NSString 12 13 14 // Cell.textの値は変更し、表示できた。 15 // この要領でlabel.textを変更し、表示したいです。 16 TableView.cellForRow(at: [0 , 0])?.textLabel?.text = mySelectedDate as String 17 18 // リロードはデイトピッカが閉じてしまうので避けたいです。 19 // dispTableView.reloadRows(at: [IndexPath(row: 0, section: 0)], with: .automatic) 20 21 } 22 // デイトピッカーの記述 =======================================================↑ 23 24

###試したこと
// cell.textの値は変更し、表示できました。
TableView.cellForRow(at: [0 , 0])?.textLabel?.text = mySelectedDate as String
自分で作ったlabelを参照し、値を変更する方法がわかりません。

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

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

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

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

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

guest

回答2

0

自己解決

こちらを参考にする事で解決しました。https://teratail.com/questions/26312

投稿2017/01/31 06:35

P-san

総合スコア21

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

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

0

labelを定義している箇所のコードが無いので適当に答えますが、

swift

1label?.text = mySelectedDate as String

ってことじゃないんでしょうか?(ってことじゃないんでしょうね)

ま、質問はさておき、セル生成のコードが無茶苦茶なので、もっとTableViewについて勉強をして下さい。
そして、カスタムセルの使い方を覚えれば、この質問の回答は得られると思います。

投稿2017/01/18 04:04

fuzzball

総合スコア16731

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

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

P-san

2017/01/18 08:21

ご回答ありがとうございます。 カスタムセルについて勉強してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問