提要:app
起始视图 | ListTableViewController |
目标视图 | DetailViewController |
segue-identifier | toDetailViewide |
1.在故事板用拖拽法链接起始视图和目标视图,类型选“show”,而且设置segue的identifier。函数
2.正向传值:spa
利用函数,prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)传值:code
import UIKit import Alamofire import SwiftyJSON class ListTableViewController: UITableViewController { // MARK: - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { //根据segue的identifier有目的地传值 if segue.identifier == "toDetailView" { if let detailView: DetailViewController = segue.destinationViewController as? DetailViewController { let data = self.noteList[self.index!] detailView.noteTitle = data["title"] as? String //这是反向传值,告诉编译器,DetailViewController的delegate在LisetTableViewContrliier实现 detailView.delegate = self } } } } extension ListTableViewController: SendNoticeToListView { //实现DetailViewController中的协议的函数 func sendNotice(sender: Bool) { if sender { print("我来自detailView") } } }
import UIKit import Alamofire import SwiftyJSON //定义反向传值的协议 protocol SendNoticeToListView{ func sendNotice(sender: Bool) } class DetailViewController: UIViewController, UITextFieldDelegate, UITextViewDelegate { //用于接收传过来的正向传过来的值 var noteTitle: String? var delegate: SendNoticeToListView? override func viewDidLoad() { super.viewDidLoad() self.titleText.text = self.noteTitle //设置返回按钮以及他触发的事件 let leftBarBtn = UIBarButtonItem(title: "返回", style: .Plain, target: self, action: #selector(backToList)) self.navigationItem.leftBarButtonItem = leftBarBtn } func backToList(){ if self.delegate != nil { //实现给协议的函数传值 self.delegate?.sendNotice(true) //弹栈返回ListTableViewController self.navigationController?.popViewControllerAnimated(true) } } }
总结:继承
正向传值:事件
1.拖拽法链接 起始视图和目标视图;ci
2.设置segue的identifier;get
3.用prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)函数传值。编译器
反向传值:
1.在目标视图中:
1.1 定义用于反向传值的协议和协议中相应的函数;
1.2 定义delegate变量,它类型是1.1的协议名;
1.3 使用delegate,调用协议中的函数,给函数的参数列表添上要反向传递的值,不须要实现函数
2.在起始视图中:
2.1 继承协议
2.2 要告诉编译器 协议在起始视图中实现:slef.目标视图.delegate = self (根据实际状况写法不一)