• iOS开发技巧-Swift版本: 3.Storyboard传参小技巧


    在前面, 我们知道用回调函数进行传参, 但那只是传参的一种方式, 现在让我们来看看第二种传参的方法.


    1.搭建界面

    1.全局界面
    1

    2.界面细节
    2

    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.TableViewControllerOne

        @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.TableVIewControllerOne

        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


    好了, 这次我们就讲到这里, 下次我们继续~~

  • 相关阅读:
    箭头函数和普通函数的区别是什么?
    前端如何优化网站性能?
    instanceof原理
    call、apply区别
    函数的节流和防抖
    关于this的指向性问题
    undefined 和null的区别?
    浅谈堆和栈的理解?
    关于vue中watch和computed
    简单说一下什么是回流和重绘
  • 原文地址:https://www.cnblogs.com/iOSCain/p/4541332.html
Copyright © 2020-2023  润新知