在前面, 咱們知道用回調函數進行傳參, 但那只是傳參的一種方式, 如今讓咱們來看看第二種傳參的方法.數組
1.全局界面
markdown
2.界面細節
ide
PS: 下面這個操做須要在編碼準備裏的ViewController定義好@IBAction func saveToMainViewController(segue: UIStoryboardSegue) {} 方法纔會顯示函數
在真正寫代碼以前, 咱們須要關聯控件, 以及聲明變量.
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!]
}
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
}
}
好了, 此次咱們就講到這裏, 下次咱們繼續~~scala