在前面, 我们除了知道用回调函数进行传参, 还有一种方法就是使用苹果自带的Storyboard进行传参,下面让我们来看看。
PS: 已更新到Swift 2.0, 支持Xcode7, iOS9
1.搭建界面
1.全局界面
2.界面细节
PS: 下面这个操作需要在编码准备里的UITableViewController定义好@IBAction func saveToMainViewController(segue: UIStoryboardSegue) {} 方法才会显示
2.实现代码(MytableViewController)
在真正写代码之前, 我们需要关联控件, 以及声明变量.
1.MyTableViewController
// 1.声明数据源数组
var models = ["iPhone 6 Plus Gold 128 GB", "iPhone 6 Plus Gold 64 GB", "iPhone 6 Plus Gold 16 GB", "iPhone 6 Gold 128 GB", "iPhone 6 Gold 64 GB", "iPhone 6 Gold 16 GB"]
// 2.自定义保存方法
@IBAction func saveToMainViewController(segue: UIStoryboardSegue) {
// 2.1获得editTableViewController
// 2.2获得editTableViewController的index变量
let index = dataiViewController.index
// 2.3获得editTableViewController的editedModel变量
let modelString = dataiViewController.editedModel
// 2.4往models里添加对应位置的对应内容
models[index!] = modelString!
// 2.5刷新当前tableView
tableView.reloadData()
}
UITableView的代理方法
// 3.UITableView的代理方法
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
// 3.1返回的组数为1
return 1
}
// 4.UITableView的代理方法
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// 4.1返回UITableViewCell的行数为models的个数
return models.count
}
// 5.UITableView的代理方法, 返回TableView的数据源
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("tableCell", forIndexPath: indexPath) as UITableViewCell
// 5.2UITableViewCell添加对应行数的内容
cell.textLabel?.text = models[indexPath.row]
// 5.3返回自定义好的UITableViewCell
return cell
}
重写UIStoryboardSegue方法
// 6.重写UIStoryboardSegue方法, 把MyTableViewController的参数传值到editTableViewController
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
// 6.1判断segue的Identifier是否为"edit", 如果是就执行里面的方法
if segue.identifier == "edit" {
// 6.2获取UITableView当前所点击的UITableViewCell行数
let path = tableView.indexPathForSelectedRow
// 6.3获得editTableViewController
let detailViewController = segue.destinationViewController as! editTableViewController
// 6.4设置editTableViewController的index变量为获得的当前UITableView所点击的UITableViewCell
detailViewController.index = path?.row
//6.5设置editTableViewController的modelArray变量为models
detailViewController.modelArray = models
}
}
3.实现代码(editTableViewController)
关联控件, 声明变量
// 1.关联UITextField控件
@IBOutlet weak var editModelTextField: UITextField!
// 2.声明变量名为index的Int类型变量
var index: Int?
// 3.声明变量名为modelArray的String类型数组
var modelArray: [String]!
// 4.声明变量名为editedModel的String类型变量
var editedModel: String?
实现ViewDidLoad方法
override func viewDidLoad() {
super.viewDidLoad()
// 5.把对应行的内容赋值给editModelTextField
editModelTextField.text = modelArray[index!]
}
UITableView代理方法
// 6.UITableView的点击事件代理方法
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
// 6.1判断当点击的UITableViewCell如果是第0组的第0行, 那么久执行下面的方法
if indexPath.section == 0 && indexPath.row == 0 {
editModelTextField.becomeFirstResponder()
}
// 6.2取消UITableViewCell当前已选中的状态
tableView.deselectRowAtIndexPath(indexPath, animated: true)
}
重写UIStoryboardSegue方法
// 7.重写UIStoryboardSegue方法
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
// 7.1判断segue的Identifier是否为save, 如果是就把编辑好的内容赋值给
editedModel if segue.identifier == "save" {
editedModel = editModelTextField.text
}
}
4.最终效果
好了, 这次我们就讲到这里, 下次我们继续~~