设为首页 加入收藏

TOP

关于“代理”(delegate)我的一点浅见
2017-10-10 12:14:24 】 浏览:2706
Tags:关于 代理 delegate 一点 浅见

代理就是你这个ViewController作为一个class本来不是干这个的,却要越俎代疱完成人家别的ViewController或者程序模块(比如 AVAudioPlayer)的功能,这时候就要用代理。

比如View里面内置一个TableView,它View既要完成View的功能,也要完成TableView的功能,它就得是 UITableViewDelegate 和 UITableViewDataSource

然后在 ViewDidLoad 里面,或者把 delegate 设置为 self (某某TableView.delegate = self) ,dataSource 设置为 self (某某TableView.dataSource = self);或者给tableView代码单独取一个文件名,dataSource代码单独取一个文件名。然后

class TableViewController: UITableViewController {

        let myDataSource = MyTableViewDataSource(happyThings: ["Youtube", "Github", "Nucakola"], cellIdentifier: "cell")

        let myDelegate = MyTableViewDelegate()

        override func viewDidLoad() {

        。。。。。。

}

 

在另外的两个文件里:

class MyTableViewDelegate: NSObject, UITableViewDelegate {

}

 

class MyTableViewDataSource: NSObject, UITableViewDataSource {

        var happyThings: [AnyObject]

        var cellIdentifier: String

        let header = "Happy Things"

 

        init(happyThings: [AnyObject]!, cellIdentifier: String!) {

                 self.happyThings = happyThings

                 self.cellIdentifier = cellIdentifier

        }

 

        func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

                 return HappyThings.count

        }

 

        func tableView(_ tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

                  let cell = tableview.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! UITableViewCell

                  // 提取对应行数据

                  let item = HappyThings[indexPath.row]

                  // 设置 cell

                  cell.textLabel?.text = item as? String

                  return cell

        }

}

 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇UITableView 里面 cell.accessory.. 下一篇UITableView数据不显示(在consol..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目