iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 17
0

前言

昨天搞了半天,還是沒辦法把 table view 中各個cell的值,另外傳出來...Sad~~
明天把問題整理整理,再拿出來檢討檢討。為了鐵人賽,今天先實做一個展示控制器 (Split View Controller),從英文字面上來看就是把畫面分開來,我們常看到左側是選單,右側則是展示畫面,這個效果就是展示控制器。

1.創建一個 Single View App 專案

2.拖曳一個 Split View Controller 進 Main.storyboard

預設的 Split View Controller會自帶一個 Navigation Controller 與 View Controller

3.將起始畫面改為 Split View Controller

在 sotryboard 上點選 Master View Controller 接著在右方 Attributes 屬性頁面中選擇 Is Initial View Controller (也可以移動一開始預設的 View Controller左側的箭頭)

接著刪除與 Split View Controller 連結的 View Controller

4.連結 Master View Controller 與預設的 View Controller

從 Master View Controller 右鍵拖曳藍線到 View Controller,並點選 detail view controller 的 Segue。

5.新增一個繼承 UITableViewController 的類別

類別名稱我們使用預設的TableViewController,接著將 sotryboard 上的 Table View Controller 的對應類別選擇這個TableViewControlle

6.在TableViewController創建cell

這邊細節不贅述,設定一個section有3個cell,cell內的文字分別為 "test1", "test2", "test3"

    var list = ["test1", "test2", "test3"]
    
    override func numberOfSections(in tableView: UITableView) -> Int {
        // #warning Incomplete implementation, return the number of sections
        return 1
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // #warning Incomplete implementation, return the number of rows
        return list.count
    }

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

        cell.textLabel?.text = list[indexPath.row]
        
        return cell
    }

7.在 storyboard 中,將cell右鍵拖曳藍線到 View Controller

Segue 模式選擇 Show Detail

8.在 View Controller 中加入一個 Label 元件

接著把 Label 加入 ViewController.swift 的 IBOulet,命名為 aLabel。
另外宣告一個變數名為 string,用來接收 TableView 傳過來的字串。

@IBOutlet weak var aLabel: UILabel!
var string: String? = nil

在viewDidLoad()中,讓 Label 顯示 string 的字

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        aLabel.text = string
    }

9.覆寫 TableViewController.swift 中 prepare(for:sender)函數

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        // Get the new view controller using segue.destinationViewController.
        // Pass the selected object to the new view controller.
        
        let cell = tableView.cellForRow(at: tableView.indexPathForSelectedRow!)
        let vc = segue.destination as! ViewController
        vc.string = cell?.textLabel?.text
    }

完成

將iphone Plus橫向


上一篇
Day16 - 陣列及字典
下一篇
Day18 - 意外的小插曲
系列文
無中生有-從SWIFT語法學習到iOS APP的開發30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言