UITableView列表页面抽象(可以无限多页面复用一组代理方法)
使用:
第一步 : 声明懒加载属性
lazy var plainView: UIView = {
var view = BNTablePlainView(frame: self.view.bounds)
view.list = allList.first
view.blockCellForRow({ (tableView, indexPath) -> UITableViewCell in
let itemList = view.list![indexPath.row] as! [String]
let cell = UITableViewCellZero.cellWithTableView(tableView) as! UITableViewCellZero;
cell.textLabel!.text = itemList[0]
return cell
})
view.blockDidSelectRow({ [weak self] (tableView, indexPath) in
let itemList = view.list![indexPath.row] as! [String]
self.goController(itemList.last, obj: nil, objOne: nil)
})
return view
}()
第二步 : viewDidLoad中添加子视图
view.addSubview(plainView)
实现:
import UIKit
import SwiftExpand
/// 通用列表视图
class BNTablePlainView:
UIView,UITableViewDataSource,UITableViewDelegate {
var list:[Any]?
var viewBlockCellForRow: CellForRowClosure?
var viewBlockDidSelectRow: DidSelectRowClosure?
override init(frame: CGRect) {
super.init(frame: frame)
addSubview(tableView)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override func layoutSubviews() {
super.layoutSubviews()
}
// MARK: - tableView
func numberOfSections(in tableView: UITableView) -> Int {
return 1;
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return list!.count;
};
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return tableView.rowHeight
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCellZero.cellWithTableView(tableView) as! UITableViewCellZero;
if self.viewBlockCellForRow != nil {
return self.viewBlockCellForRow!(tableView, indexPath);
}
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if self.viewBlockDidSelectRow != nil {
return self.viewBlockDidSelectRow!(tableView, indexPath);
}
}
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 10.0;
}
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
return UIView();
}
func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return 0.01;
}
func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
let label = UILabel(frame: .zero);
// label.backgroundColor = .green;
// label.text = "header\(section)";
return label;
}
func blockCellForRow(_ action: @escaping CellForRowClosure) -> Void {
self.viewBlockCellForRow = action;
}
func blockDidSelectRow(_ action: @escaping DidSelectRowClosure) -> Void {
self.viewBlockDidSelectRow = action;
}
//MARK: -lazy
lazy var tableView: UITableView = {
var table = UITableView(frame:self.bounds, style: .plain);
table.autoresizingMask = UIViewAutoresizing(rawValue: UIViewAutoresizing.flexibleWidth.rawValue | UIViewAutoresizing.flexibleHeight.rawValue)
table.separatorStyle = .singleLine;
table.separatorInset = .zero;
table.rowHeight = 60;
table.register(UITableViewCell.self, forCellReuseIdentifier: UITableViewCell.identifier);
table.backgroundColor = UIColor.background;
table.dataSource = self
table.delegate = self
return table
}()
}
网友评论