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

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

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

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

Xcode

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

Swift

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

Q&A

解決済

3回答

1966閲覧

tableview subtitle 現在日時の取得

退会済みユーザー

退会済みユーザー

総合スコア0

TableView

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

Xcode

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

Swift

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

0グッド

0クリップ

投稿2017/02/15 15:04

イメージ説明

swift

1import UIKit 2import CoreData 3 4class ViewController: UIViewController, UITableViewDataSource { 5 6 @IBOutlet weak var tableView: UITableView! 7 8 var people = [Person]() 9 10 override func viewDidLoad() { 11 super.viewDidLoad() 12 13 title = "\"The List\"" 14 tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell") 15 } 16 17 func tableView(_ tableVeiw: UITableView, numberOfRowsInSection section: Int) -> Int { 18 return people.count 19 } 20 21 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 22 let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") 23 24 let person = people[indexPath.row] 25 26 cell!.textLabel!.text = person.value(forKey: "name") as? String 27 28 //subtitle 現在日時を取得 29 let now = NSDate() // 現在日時の取得 30 31 let dateFormatter = DateFormatter() 32 dateFormatter.locale = NSLocale(localeIdentifier: "en_US") as Locale! // ロケールの設定 33 dateFormatter.dateFormat = "yyyy年MM月dd日 HH:mm"//:ss" // 日付フォーマットの設定 34 35 let dateString = dateFormatter.string(from: now as Date) 36 print(dateString) // -> 2014/06/25 02:13:18 37 cell!.detailTextLabel?.text = person.value(forKey: "lastname") as? String 38 return cell! 39 } 40 41 func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { 42 let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 43 44 if editingStyle == .delete{ 45 //self.tableView.setEditing(true, animated: true) 46 47 context.delete(people[indexPath.row]) 48 49 (UIApplication.shared.delegate as! AppDelegate).saveContext() 50 51 do { 52 people = try context.fetch(Person.fetchRequest()) 53 }catch let error as NSError { 54 print("Could not save \(error), \(error.userInfo)") 55 } 56 tableView.reloadData() 57 } 58 } 59 60 @IBAction func addName(_ sender: Any) { 61 let alert = UIAlertController(title: "New name", message: "Enter a new name", preferredStyle: .alert) 62 63 let saveAction = UIAlertAction(title: "Save", style: .default) { (action) in 64 let textField = alert.textFields?.first 65 self.saveName(name: textField!.text!) 66 self.tableView.reloadData() 67 } 68 69 let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: nil) 70 71 alert.addTextField(configurationHandler: nil) 72 alert.addAction(saveAction) 73 alert.addAction(cancelAction) 74 75 present(alert, animated: true, completion: nil) 76 77 } 78 79 func saveName(name: String){ 80 let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 81 82 let person = Person(entity: Person.entity(), insertInto: context) 83 84 person.setValue(name, forKey: "name") 85 86 do{ 87 try context.save() 88 people.append(person) 89 } catch let error as NSError { 90 print("Could not save \(error), \(error.userInfo)") 91 } 92 } 93 94 override func viewWillAppear(_ animated: Bool) { 95 super.viewWillAppear(animated) 96 97 let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 98 99 do{ 100 let result = try context.fetch(Person.fetchRequest()) 101 people = result as! [Person] 102 }catch let error as NSError { 103 print("Could not save \(error), \(error.userInfo)") 104 } 105 } 106 107 override func didReceiveMemoryWarning() { 108 super.didReceiveMemoryWarning() 109 } 110 111}

試したこと
アラートテキストで入力したい値をtitleに表示できるようにし、subtitleで現在日時を自動的に取得しsubtitleにアラートテキストで入力した時間を表示させようとしたが実行してみるとデバッグエリアでしか表示されてなかった

実現したいこと
例)title 今日の出来事
subtitle 2017年2月15日 15:00
例のようにsubtitleで入力した現在日時を表示出来るようにしたいです。

説明が下手ですいませんが教えて頂けたら嬉しいです。

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

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

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

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

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

fuzzball

2017/02/15 22:38

Swift3ならDateを使った方がいいですよ。
guest

回答3

0

swift

1class ViewController: UIViewController, UITableViewDataSource { 2 3 var data: Date? 4 5 override func viewDidLoad(){ 6 super.viewDidLoad() 7 8 self.data = Date() 9 } 10 11

こんな感じで変数にもたせていいんじゃないですか?

投稿2017/02/17 03:25

domonr

総合スコア263

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

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

退会済みユーザー

退会済みユーザー

2017/02/17 15:44

用事があって返信遅れてすいません 教えていただいた通りにやってみたのですがどうしても時間が進むのですがもしかして自分のやり方が間違っているのでしょうか? var data: NSData? などでも試してみたのですがうまくいきませんでした。
guest

0

dateStringが代入されていません。

swift

1cell!.detailTextLabel?.text = dateString

投稿2017/02/16 01:56

編集2017/02/16 04:33
fuzzball

総合スコア16731

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

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

退会済みユーザー

退会済みユーザー

2017/02/16 04:26

セルのstyleはsubtitleになっています それとどのようにコードが対応ができていないかを具体的に説明して頂けませんか?
fuzzball

2017/02/16 04:35 編集

回答を修正しました。 >>どのようにコードが対応ができていないか カスタムセルを使っていないのであれば関係ないので気にしないで下さい。 あと、質問のマルチポストはマナー違反です。
退会済みユーザー

退会済みユーザー

2017/02/16 04:56

すいませんでした 以後注意します ご指摘ありがとうございました
退会済みユーザー

退会済みユーザー

2017/02/20 01:58

終わった質問に質問するのはマナー違反かもしれませんが一つだけお聞きしたい子がどうしてもあるのでマナー違反かもしれませんが教えていただきたいです cell!.textLabel!.text = person.value(forKey: "name") as? String を真似て cell!.detailTextLabel?.text = person.value(forKey: "dateString") as? String と書けばデータ保存できるかなと思ってやってみたのですが案の定できなったのですがこの考え方は間違っているのでしょうか? それとviewDidloadで保存する場合はどのようにすればいいのかをヒントだけでもいいので教えていただけませんか?
fuzzball

2017/02/20 02:12

dateStringはtableView(_:cellForRowAt:)内のローカル変数ですから関数の外では参照できません。(というか存在しません) 基本的なことをすっ飛ばしていたら、いつまで経ってもこんな状態ですよ。 あなたがやっていることは「study」じゃないです。
退会済みユーザー

退会済みユーザー

2017/02/20 03:01

自分でもstudyになっていないことは承知なんですがそれと勉強はしているのですが永続保存について書いてある技術書が少なく特に使えるようになりたいcoredataについては全然技術書がなくどう勉強すれば分からないんです。 ですのでもし良ければcoredata等の永続保存についての勉強の仕方を教えていただけないでしょうか?
fuzzball

2017/02/20 03:40

「基本的なこと」ってSwiftのことですよ。 英語の勉強をせずに英語の小説を書いているようなものです。
guest

0

ベストアンサー

イメージ説明

Main.storyboard のTableViewのCellの右側の設定の部分で
・Style → これを Subtitle に
・Identifier → ここはなんでもいいです 適当に TestCellとかにしました。 Cell でもいいです
の2つを設定してください

そして、viewDidLoadの

swift

1tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")

を削除して、

swift

1func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 2 let cell = tableView.dequeueReusableCell(withIdentifier: "Cell")

ここの部分の withIdentifierをstoryboardで設定したIdentifierに変えてください。

swift

1func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 2 let cell = tableView.dequeueReusableCell(withIdentifier: "TestCell")

こんな感じでどうでしょうか?
わからないところあったらコメントください。

投稿2017/02/16 01:42

domonr

総合スコア263

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

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

退会済みユーザー

退会済みユーザー

2017/02/16 03:58

回答していただいてありがとうございます 早速試してみたところ tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell") を消すとエラーが起きてしまうのですがもしよければもう一度教えていただけませんか?
domonr

2017/02/16 06:36

どういうエラー?
退会済みユーザー

退会済みユーザー

2017/02/16 13:44

エラーの部分はなんとか自力で解決できました それと自分のイメージ通りに表示させることが出来たのですが、現在日時の部分が時間が進むにつれて勝手に変わるのですが入力した時の現在日時で固定させたいのですがこの場合どうしたらいいですか?
domonr

2017/02/17 01:35

想像でしかないですが、 reloadDataがちょいちょい呼ばれていて、その度に func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { が呼ばれているということはないでしょうか? printを仕込んだり、breakpointを使ってみたりしてはどうでしょうか。
fuzzball

2017/02/17 02:04 編集

domon0501さんが書いているように、reload(セルの更新)のたびに「 let now = NSDate()」しているので時間が変わっていきます。viewDidLoadなどで時間を取得して保存しておけばいいです。
退会済みユーザー

退会済みユーザー

2017/02/17 03:16

viewDidLoadで時間を取得して保存する場合どのようにすればいいのでしょうか? どこにどのようなコードを書き入れればいいのか教えて頂けないでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問