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

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回答

1490閲覧

Viewを遷移する度に遷移先のCellを増やしたい

Susanoo2442

総合スコア153

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クリップ

投稿2016/09/20 16:21

現在、アプリを作成しているのですが
あと少しのところでつまづいています。

一枚目のページのテキストフィールドに入力した値を
ボタンをクリックすることによって
UsreDefaultsに保存しています。

そして、二枚目に遷移したら
UserDefaultsを読み込んで
二枚目に配置してあるラベルの文字を変えて

さらにここから
二枚目に配置してあるボタンをタッチすると
また、一枚目に遷移して
そしてまた、一枚目のテキストフイールドに文字を入力して
保存ボタンを押すと値を保存して
遷移するボタンを押すと二枚目のページのCellを増やすついったことが
したいです。

しかしながら
あと少しのところで手詰まりになっています。

コードを載せます。

こちらが一枚目のViewControllerでございます。

Swift

1import Foundation 2import UIKit 3 4 5 6 7class FirstViewController: UIViewController{ 8 9 10 11 let userDefaults = NSUserDefaults.standardUserDefaults() 12 13 14 var Savehozon: String? 15 16 17 @IBOutlet weak var MyText: UITextField! 18 19 //こちらが保存ボタンです。 20 @IBAction func AddAction(sender: AnyObject) { 21 22 //テキストフィールドに入力したあたいをこの保存ボタンで保存してSavehozonに代入しています。 23 Savehozon = MyText.text! 24 25 26 27 //それをReciveSaveでキーを取得して保存しています。 28 userDefaults.setObject(Savehozon, forKey:"ReciveSave") 29 30 } 31 32 33 override func viewDidLoad() { 34 super.viewDidLoad() 35 36 37 38 39 } 40 41 override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 42 view.endEditing(true) 43 } 44 45 override func didReceiveMemoryWarning() { 46 super.didReceiveMemoryWarning() 47 } 48 49 50 51 52 53} 54 55 56

こちらが2枚目のViewControllerです。

import Foundation
import UIKit

class SaitouViewController: UITableViewController {

var ReciveData: [String] = [] let userDefaults = NSUserDefaults.standardUserDefaults()

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

//対象のCellを取得しています。 let cell = tableView.dequeueReusableCellWithIdentifier("MyCell", forIndexPath:indexPath) //Cellに配置してあるラベルをタグIDから取得しました。 let label = cell.viewWithTag(1) as! UILabel //それをReciveData[0]で取り出してラベルを書き換えています。 label.text = ReciveData[0] return cell } override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return ReciveData.count } override func viewDidLoad() { super.viewDidLoad() //二枚目に遷移してきたらReciveSaveを読み込んで配列ReciveDataにappendしました。 let result = userDefaults.objectForKey("ReciveSave") as? String ReciveData.append(result!) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() }

}

ここまで、なんとかコーディングしてみたのですが
どうしても、遷移元で保存ボタンを押して
遷移してCellを表示そしてまた遷移元に戻り
新しい、値を保存して遷移して新しいCellを追加といったことができません。

これらの処理を実現できるよう
どなたか、アドバイスを頂けたらと思います。

宜しくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

表示するものは配列で保持しなと複数表示できないのでArray<Strin>の型でNSUserDefaults保存してください。

swift

1import Foundation 2import UIKit 3 4class FirstViewController: UIViewController{ 5 6 let userDefaults = NSUserDefaults.standardUserDefaults() 7 var Savehozon: String? 8 9 @IBOutlet weak var MyText: UITextField! 10 11 //こちらが保存ボタンです。 12 @IBAction func AddAction(sender: AnyObject) { 13 14 //テキストフィールドに入力したあたいをこの保存ボタンで保存してSavehozonに代入しています。 15 Savehozon = MyText.text! 16 17 if var result = userDefaults.objectForKey("ReciveSave") as? Array<String> { 18 result.append(Savehozon!) 19 //それをReciveSaveでキーを取得して保存しています。 20 userDefaults.setObject(result, forKey:"ReciveSave") 21 } else { 22 userDefaults.setObject([Savehozon!], forKey:"ReciveSave") 23 } 24 25 userDefaults.synchronize() 26 } 27 28 29 override func viewDidLoad() { 30 super.viewDidLoad() 31 32 } 33 34 override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 35 view.endEditing(true) 36 } 37 38 override func didReceiveMemoryWarning() { 39 super.didReceiveMemoryWarning() 40 } 41} 42 43 44// ------------------------------------------------- 45 46import Foundation 47import UIKit 48 49class SaitouViewController: UITableViewController { 50 51 var ReciveData: [String] = [] 52 53 let userDefaults = NSUserDefaults.standardUserDefaults() 54 55 override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 56 57 //対象のCellを取得しています。 58 let cell = tableView.dequeueReusableCellWithIdentifier("MyCell", forIndexPath:indexPath) 59 //Cellに配置してあるラベルをタグIDから取得しました。 60 let label = cell.contentView.viewWithTag(1) as! UILabel 61 //それをReciveData[indexPath.row]で取り出してラベルを書き換えています。 62 label.text = ReciveData[indexPath.row] 63 return cell 64 } 65 66 override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 67 return ReciveData.count 68 } 69 70 override func viewDidLoad() { 71 super.viewDidLoad() 72 73 //二枚目に遷移してきたらReciveSaveを読み込んで配列ReciveDataにappendしました。 74 if let result = userDefaults.objectForKey("ReciveSave") as? Array<String> { 75 ReciveData = result 76 } 77 } 78 79 override func didReceiveMemoryWarning() { 80 super.didReceiveMemoryWarning() 81 82 } 83}

投稿2016/09/20 23:36

_Kentarou

総合スコア8490

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

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

Susanoo2442

2016/09/21 05:48

実現したことが無事できました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問