如何扩展UITableView?

时间:2016-04-12 02:07:02

标签: ios swift uitableview

我在30个统一文件中使用UITableViewDelegate,UITableViewDataSource, 所有使用相同的代码,我如何使它们可以重复使用扩展它们? 它只有两个UITableViewDelegate方法和一些自定义的东西,比如行高。

示例:

import UIKit
import MMDrawerController
import SwiftyJSON


class FooViewController: UIViewController,UITableViewDelegate,UITableViewDataSource  {
    var texto = [String]()

    @IBOutlet weak var table: UITableView!

    override func viewDidLoad() {
        let load = Loader(view: self.view)
        table.delegate = self
        table.dataSource = self
        table.rowHeight = UITableViewAutomaticDimension
        table.estimatedRowHeight = 44.0

        let api = API()
        api.get("agenda") { responseObject, error in

            let value = JSON(responseObject!)
            self.texto.append(value["agenda"]["textoagenda"].stringValue)

            self.table!.reloadData()
            load.stop(self.view)
        }
    }


    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.texto.count
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("cell")! as UITableViewCell
        cell.textLabel?.text = self.texto[indexPath.row]
        return cell
    }


}

1 个答案:

答案 0 :(得分:0)

您的控制器不必是代表。您可以将任何类作为委托。

class MyTableDelegate: UITableViewDelegate {

    // put table functions here

}

然后在您的控制器中

@IBOutlet weak var table: UITableView!

override func viewDidLoad() {
    let load = Loader(view: self.view)
    table.delegate = MyTableDelegate()

    // etc

}

当然,这意味着您可以有限地访问控制器的属性。