2015年

7月

08日

Swift Table 画面遷移 基本  Plist使用(valueForKey指定)

Table 画面遷移基本例でTable 表示データを配列やPlistを使用しています。

 

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 {


    // Plist用の配列

    var _items:NSArray = []

    

    override func viewDidLoad() {

        super.viewDidLoad()

        

        // Plistファイルパス

        let path = NSBundle.mainBundle().pathForResource("Items3", ofType:"plist")

        _items = NSArray(contentsOfFile:path!)!

        

        //println(_items);


    }


    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 {


        // Get a Cell

        let cell = tableView.dequeueReusableCellWithIdentifier

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

        

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

        cell.textLabel!.text = dic.valueForKey("Name") as? String

        cell.detailTextLabel!.text = dic.valueForKey("Note") as? String

        

        return cell

    }


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

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

        

        // セグエ判定

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

            // セルの情報の取得

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

            // row 行数の抜き出し

            var row:NSInteger = indexPath.row

            

            // DetailViewControllerクラスをインスタンス化して

               segue(画面遷移)で値を渡せるようにバンドルする

            let detailView : DetailViewController =

                             segue.destinationViewController as! DetailViewController

            // detailView(バンドルされた変数)に受け取り用の変数を引数としrowを渡す

                          (rowには渡したい値)

            // この時DetailViewControllerにて受け取る同型の変数を用意しておかないとエラーになる

            detailView.row =  row as Int

            //println(" \(detailView.row)")

        }

    }

}

DetailViewController.swift

import UIKit


class DetailViewController: UIViewController {


    // Plist用の配列

    var _items:NSArray = []


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

    var row:Int = 0

    

    @IBOutlet weak var lbMessage: UILabel!

    

    override func viewDidLoad() {

        super.viewDidLoad()

        

        // Plistファイルパス

        let path = NSBundle.mainBundle().pathForResource("Items3", ofType:"plist")

        _items = NSArray(contentsOfFile:path!)!


        //println(" \(row)")

        

        // タイトルの表示

        self.lbMessage!.text = _items.objectAtIndex(row).valueForKey("Name") as? String

    }


    override func didReceiveMemoryWarning() {

        super.didReceiveMemoryWarning()

        // Dispose of any resources that can be recreated.

    }

}

Plist valueForKeyの記述を2行から1行にまとめた例。


2行記述

let dic = _items.objectAtIndex(row) as! NSDictionary

// タイトルの表示

self.lbMessage!.text = dic.valueForKey("Name") as? String


1行記述

// タイトルの表示

self.lbMessage!.text = _items.objectAtIndex(row).valueForKey("Name") as? String

▫️参考ページ

  

目 次

 

コメントをお書きください

コメント: 2
  • #1

    たまご (水曜日, 02 9月 2015 15:19)

    UIパーツの結びつけの解説もお願いできませんか?

  • #2

    luke (水曜日, 02 9月 2015 15:24)

    済みません少し時間をください。