设为首页 加入收藏

TOP

窥探Swift之协议(Protocol)和委托代理(Delegate)回调的使用(三)
2017-10-10 12:17:29 】 浏览:6531
Tags:窥探 Swift 协议 Protocol 委托 代理 Delegate 使用
Controller: UIViewController {
2 3 var girlOldName:String? 4 weak var delegate: EditViewControllerDelegate? 5 @IBOutlet var girlNameTextField: UITextField! 6 7 8 override func viewDidLoad() { 9 super.viewDidLoad() 10 if self.girlOldName != nil { 11 self.girlNameTextField.text = self.girlOldName! 12 } 13 } 14 15 override func viewWillDisappear(animated: Bool) { 16 let name:String! = self.girlNameTextField.text 17 if name != "" { 18 if delegate != nil { 19 delegate!.fetchGirlName(name) 20 } 21 } 22 } 23 24 override func didReceiveMemoryWarning() { 25 super.didReceiveMemoryWarning() 26 } 27 28 deinit { 29 print("释放") 30 } 31 }

 

    2.上面的代码是实现编辑页面并实现相应的委托协议,下方就是要从之前TableView中进行跳转。也就是点击TableView的每一行,然后跳转到编辑页面对其当前点击的cell进行编辑,编辑后返回通过代理进行值的修改。

      (1)首先要解决的就是点击Cell跳转到EditViewController, 要执行这个事件,我们还必须实现TableView的另一个协议,就是UITableViewDelegate, 以为点击Cell的事件获取的方法就在TableViewDelegate中。所以我们要在TableView所在的ViewController中的viewDidLoad()中指定UITableViewDelegate的委托代理者。如下所示。同时该ViewContoller也要实现UITableViewDelegate协议。

1 self.myTableView.delegate = self

    

      (2) 实现UITableViewDelegate协议中点击Cell的方法,方法中的内容如下所示。在该方法中,首先我们要暂存一下点击的是哪个Cell, 也就是记录一下点击Cell的IndexPath, 然后就是获取点击的Cell对象,因为通过该Cell对象,可以获取相应Cell上的数据。具体的不多说了,请看代码中的注释。

 1     //-----------UITableViewDelegate------------------
 2     func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
 3         
 4         //记录当前点击的IndexPath
 5         self.selectIndexPath = indexPath
 6         
 7         //获取当前点击的Cell对象
 8         let currentSelectCell:BeautifulGrillCell? = self.myTableView.cellForRowAtIndexPath(indexPath) as? BeautifulGrillCell
 9         
10         //从storyboard中实例化编辑视图控制器
11         let editViewController:EditViewController = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle()).instantiateViewControllerWithIdentifier("EditViewController") as! EditViewController
12         
13         //指定编辑视图控制器委托代理对象
14         editViewController.delegate = self
15         
16         //把点击Cell上的值传递给编辑视图控制器
17         if currentSelectCell != nil {
18            editViewController.girlOldName = currentSelectCell!.girlNameLable.text!
19         }
20         
21         //push到编辑视图控制器
22         self.navigationController?.pushViewController(editViewController, animated: true)
23     }

 

      (3)上面是跳转,接下来就是要实现EditViewControllerDelegate中的回调方法,来处理相应的回调参数了。下方就是在表视图中实现的回调方法,具体请看代码中的注释:

 1     //-----------EditViewControllerDelegate------------------
 2     
 3     func fetchGirlName(name: String) {
 4         
 5         if selectIndexPath != nil {
 6             //获取当前点击Cell的索引
 7             let index = (selectIndexPath?.row)!
 8             
 9             //更新数据源中相应的数据
10             self.dataSource![index][GIRL_NAME] = name
11             
12             //重载TableView
13             self.myTableView.reloadData()
14         }
15         
16     }

  

    经过上面的步骤,我们就可以去定义属于自己的协议,并在此协议上实现委托回调了。上面的场景在iOS开发中极为常见,使用场景也是比较广泛的。所以协议无论在Swift还是在iOS开发中都是极为重要的概念之一。好今天的博客内容也挺多的了,就到此为止,剩下的东西,会在以后的博客中继续更新。

    上面实例GitHub分享地址(基于Xcode7.1):https://github.com/lizelu/SwiftDelegateDemo

首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Swift语法笔记 下一篇窥探Swift之类的继承与类的访问权..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目