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

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

ただいまの
回答率

87.61%

safariのブックマークのようなtableviewの連続を実装したい

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 976

score 15

 前提・実現したいこと

swiftでsafariのブックマークのような,tableviewのcellをタップするとそこからさらに下の階層のtableviewに遷移できるような機能を実装したいと考えています.
tableviewのcellからtableviewへの遷移と,それぞれのtableのcellの追加・削除はできるようになっていますが,遷移先から戻り再び遷移するとtableviewに格納する配列の値が初期化されてしまいます.
これを初期化せずに保存し,viewControllerのtableviewのcellの増減に合わせて内包するviewも増減するようにしたいと考えています.
storyboardは以下のように配置してあります.
イメージ説明

 該当のソースコード

以下に遷移先のProductViewControllerのソースコードを示します.
また遷移前のviewcontrollerは,下記のソースコードの変数,クラス名,関数名,編集に関するコメントアウトがされていない以外は同じものとなっています.

import UIKit

class ProductViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {

    var productTitle:[String] = []

    @IBOutlet weak var productTable: UITableView!
    @IBOutlet weak var addButton: UIBarButtonItem!

    //ここに戻ってくる時の処理
    @IBAction func GoToProductViewController(_ segue : UIStoryboardSegue){
        guard let source = segue.source as? AddProductViewController else {
            fatalError()
        }
        if let text = source.productName!.text {
            productTitle.append(text)
            productTable.reloadData()
        }

    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        productTable.delegate = self
        productTable.dataSource = self

        //セルの編集buttonの追加
        //self.navigationController?.isNavigationBarHidden = false
        //navigationItem.rightBarButtonItem = editButtonItem
        //productTable.reloadData()
    }

    // Table Viewにいくつのセルを表示するかを指定する
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return productTitle.count
    }

    // セルに表示する値を設定する
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        // データを表示するセルを取得する
        let productCell: UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "ProductCell", for: indexPath)

        // セルに表示する値を設定する
        productCell.textLabel!.text = productTitle[indexPath.row]

        // データを設定したセルを返却する
        return productCell
    }
    //セルの編集
    //override func setEditing(_ editing: Bool, animated: Bool) {
        //override前の処理を継続してさせる
        //super.setEditing(editing, animated: animated)
        //productTable.isEditing = editing

        //addButton有効化,無効化
        //if editing {
            //addButton.isEnabled = true
            //self.navigationItem.hidesBackButton = false
        //}
        //else{
            //addButton.isEnabled = false
            //self.navigationItem.hidesBackButton = true
        //}
    //}

    func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
        return true
    }

    //編集ボタンが押下された時の処理
    //func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {

        //dataを消してから
        //productTitle.remove(at: indexPath.row)
        //tableViewCellの削除
        //tableView.deleteRows(at: [indexPath], with: .automatic)
        //productTable.reloadData()
    //}

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

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

swift 4.2 xcode 10.0

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

UserDefaultsを使用したらいかがでしょうか?
値を保存しておくことができるので、遷移するたびに呼び出して配列に格納すれば使用できます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 87.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る