美文网首页
iOS 重构 - UITableView列表页面抽象

iOS 重构 - UITableView列表页面抽象

作者: SoaringHeart | 来源:发表于2019-01-22 15:03 被阅读3次

    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
    }()
    }
    

    demo

    相关文章

      网友评论

          本文标题:iOS 重构 - UITableView列表页面抽象

          本文链接:https://www.haomeiwen.com/subject/uqgljqtx.html