2015年

7月

09日

Swift Table 画面遷移 基本  Plist -> NSArray -> NSDictionary

Table データ表示をPlist -> NSArray -> NSDictionary 経由で表示しテーブルからセレクトしたPlist「Name」のみを遷移先に転送している。

 

Objective-Cの場合はこちら

Item3.plist

_items配列にて使用しテーブル表示する。

Storyboardについては、ViewControlerを削除しNavigation Controlierを選択して使用

注意※ 画面サイズはこのままサイズ(デフォルトサイズ表示)を使用すること。4.7インチ等に変えると画面遷移した時に遷移先のラベルが表示しない。

セルの設定
Style:Subtitle
Identifler:Cell

テーブルリストから遷移先の「DetailViewController」に紐付けする場合「Storyboard Segue」のIdentifler:「Segue01」と記述しておく。

TableViewController.swift

import UIKit


class TableViewController: UITableViewController {


    var _items:NSArray = []

    

    override func viewDidLoad() {

        super.viewDidLoad()


        // リソースにあるplistファイルを読み込む

        let bnd:NSBundle = NSBundle.mainBundle()

        let prs:NSString = bnd.pathForResource("Items3",ofType:"plist")!

        // Plist -> NSArray

        _items = NSArray(contentsOfFile:prs as String)!


    }


    override func didReceiveMemoryWarning() {

        super.didReceiveMemoryWarning()

        // Dispose of any resources that can be recreated.

    }


    // MARK: - Table view data source


    // 設定(列)

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {

        // #warning Potentially incomplete method implementation.

        // Return the number of sections.

        return 1

    }


    // 設定(行数)

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int)

     -> Int {

        // #warning Incomplete method implementation.

        // Return the number of rows in the section.

        return _items.count

    }


    // 設定(セル)

    override func tableView(tableView: UITableView,

                  cellForRowAtIndexPath indexPath:

                  NSIndexPath) -> UITableViewCell {

                    

        let cell = tableView.dequeueReusableCellWithIdentifier

                  ("Cell", forIndexPath: indexPath) as! UITableViewCell


        // 表示データの設定 NSArray -> NSDictionary

        var dic:NSDictionary = _items.objectAtIndex(indexPath.row) as! NSDictionary

        //println(" Plist:\(dic)")

                    

        var str01:NSString = dic["Name"]! as! NSString

        var str02:NSString = dic["Note"]! as! NSString

                    

        cell.textLabel!.text = str01 as String

        cell.detailTextLabel!.text = str02 as String


        return cell

    }

 

    // MARK: - Navigation


    // 画面遷移時に値を遷移先に渡す

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

        

        // セグエ判定

        if (segue.identifier == "Segue01"){

            

            // セルの行情報の取得

            var indexPath:NSIndexPath = self.tableView.indexPathForSelectedRow()!

            // 表示データの設定 NSArray -> NSDictionary

            var dic:NSDictionary = _items.objectAtIndex(indexPath.row) as! NSDictionary

            // Plist "Name"情報

            var str:NSString = dic["Name"]! as! NSString

            

            // DetailViewControllerクラスをインスタンス化してsegue(画面遷移)

         で値を渡せるようにバンドルする

            let vc : DetailViewController = segue.destinationViewController

                                as! DetailViewController

            

            // "Name"を転送

            vc.mssage = str;

            

            //println(" \(vc.mssage)")

        }

    }

}

DetailViewController.swift

import UIKit


class DetailViewController: UIViewController {


    @IBOutlet weak var lbMessage: UILabel!

    

    // 遷移時の受け取り用の変数

    var mssage:NSString = ""

    

    

    override func viewDidLoad() {

        super.viewDidLoad()

        

        // タイトルの表示

        self.lbMessage!.text = mssage as String

    }


    override func didReceiveMemoryWarning() {

        super.didReceiveMemoryWarning()

        // Dispose of any resources that can be recreated.

    }

    


    /*

    // MARK: - Navigation


    // In a storyboard-based application, you will often want to do a little preparation

            before navigation

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

        // Get the new view controller using segue.destinationViewController.

        // Pass the selected object to the new view controller.

    }

    */


}

▫️参考ページ

  

目 次