iOS開發技巧-Swift版本: 3.Storyboard傳參小技巧

在前面, 咱們知道用回調函數進行傳參, 但那只是傳參的一種方式, 如今讓咱們來看看第二種傳參的方法.數組


1.搭建界面

1.全局界面
1markdown

2.界面細節
2ide

PS: 下面這個操做須要在編碼準備裏的ViewController定義好@IBAction func saveToMainViewController(segue: UIStoryboardSegue) {} 方法纔會顯示函數

3

4

5

6


2.編碼準備

在真正寫代碼以前, 咱們須要關聯控件, 以及聲明變量.
1.ViewController優化

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    var models = ["張三", "李四", "王五", "陳六", "趙七"]

    @IBOutlet var myTableView: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()
        myTableView.delegate = self
        myTableView.dataSource = self
    }

    // 聲明一個方法, 從TableViewControllerOne回傳數據到ViewController
    @IBAction func saveToMainViewController(segue: UIStoryboardSegue) {

        // 1.獲取到TableViewControllerOne而且賦給變量data
        let data = segue.sourceViewController as! TableViewControllerOne

        // 2.獲取到TableViewControllerOne裏的index索引, 而且把TableViewControllerOne裏的editModel存到對應的models裏
        models[data.index!] = data.editModel!

        // 3.刷新TableView
        myTableView.reloadData()
    }

2.TableViewControllerOneui

@IBOutlet var editTextField: UITextField!

    var index: Int?
    var editModel: String?
    var modelArray: [String]!


    override func viewDidLoad() {
        super.viewDidLoad()
        //
        editTextField.text = modelArray[index!]
    }

3.開始實現

1.ViewController編碼

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return models.count
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("tableCell", forIndexPath: indexPath) as! UITableViewCell
        cell.textLabel?.text = models[indexPath.row]
        return cell
    }

    // 操做體驗優化
    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        // 1.每當點中TableViewCell以後, 都會恢復原來的樣式
        myTableView.deselectRowAtIndexPath(indexPath, animated: true)
    }

    // 重寫連線
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        // 1.在Storyboard裏給連線命名爲edit
        if segue.identifier == "edit" {

            // 2.聲明path變量爲myTableView爲當前所點擊的indexPath
            var path = myTableView.indexPathForSelectedRow()

            // 3.獲取到TableViewControllerOne而且賦給變量detailTableViewController
            var detailTableViewController = segue.destinationViewController as! TableViewControllerOne

            // 4.設置detailTableViewController裏的變量index爲myTableView當前所點擊的indexPath
            detailTableViewController.index = path?.row

            // 5.設置detailTableViewController裏的modelArry數組爲myTableView的models數組
            detailTableViewController.modelArray = models
        }
    }

2.TableVIewControllerOnespa

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        // 1.判斷當前所展現的tableViewCell是否爲條件所示
        if indexPath.section == 0 && indexPath.row == 0 {
            // 2.若是成立, editTextField就爲第一響應者
            editTextField.becomeFirstResponder()
        }
        // 體驗優化
        // 3.判斷結束以後, 若是誤點中Cell, 那麼就取消選中Cell
        tableView.deselectRowAtIndexPath(indexPath, animated: true)
    }

    // 重寫連線
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        // 1.判斷segue的indentifier是否爲save
        if segue.identifier == "save" {
            // 2.若是判斷爲真, 那麼就把editTextField的內容存入到editModel
            editModel = editTextField.text
        }
    }

4.最終效果

1


好了, 此次咱們就講到這裏, 下次咱們繼續~~scala

相關文章
相關標籤/搜索