Git Product home page Git Product logo

cxytableviewext-swift's Introduction

CXYTableViewExt-Swift

Make UITableView configuration easier. 让你更简单的配置UITableView,极大的简化逻辑

如果你在寻找 OC 版本的话,移步这里 https://github.com/iHongRen/CXYTableViewExt-OC

使用 CocoaPods - pod install --repo-update

pod 'CXYTableViewExt-Swift'

Usage(使用)

1、Customize your Cell , then implement the CXYTableItemProtocol protocol

(自定义Cell,然后实现 CXYTableItemProtocol 协议)

extension TextCell: CXYTableItemProtocol {
    func configItem(data: Any?) {
      //TODO: Configure your Cell
    }
}

2、Configure your TableView

(配置TableView,无需提前注册Cells)

func configTable() {
    self.tableView.t.makeConfig { make in
        make.addCellItems(cellClass: TextCell.self, dataList: Array(1...10))
    }
}

Example1 (例子1)

class SettingController: UIViewController {

    @IBOutlet weak var tableView: UITableView!

    var noti = SettingModel(title: "Mute Notification(消息免打扰)", isOn: true)
    var top = SettingModel(title: "Sticky on Top(置顶)", isOn: false)
  
    override func viewDidLoad() {
        super.viewDidLoad()
        self.title = "Setting"
        
        configTable()
    }
    
    func configTable() {
        self.tableView.t.makeConfig { make in
            
            make.addCellItem(cellClass: LineCell.self)
            make.addCellItem(cellClass: ArrowCell.self, data: SettingModel(title: "BaseTableController", detail: "基类实现代理")) { 
              data, indexPath in
                 ///TODO: didSelectRow
            }
            
            make.addCellItem(cellClass: ArrowCell.self, data: SettingModel(title: "Refresh&LoadMore", detail: "下拉刷新&加载更多")) { 
              data, indexPath in
                ///TODO: didSelectRow
            }
            
            make.addCellItem(cellClass: ArrowCell.self, data: SettingModel(title: "Custom CXYTableDataSource", detail: "自定义代理")) { 
              data, indexPath in
             	  ///TODO: didSelectRow
            }
            
            make.addCellItem(cellClass: ArrowCell.self, data: SettingModel(title: "Header&Footer", detail: "section头和尾")) { 
              data, indexPath in
             	 ///TODO: didSelectRow
            }
           
            make.addCellItem(cellClass: ArrowCell.self, data: SettingModel(title: "Editable", detail: "可编辑")) { 
              data, indexPath in
               ///TODO: didSelectRow
            }
            
            make.addCellItem(cellClass: LineCell.self)
            make.addCellItem(cellClass: SwitchCell.self, data: self.noti, delegate: self)
            make.addCellItem(cellClass: SwitchCell.self, data: self.top, delegate: self)
             
            make.addCellItem(cellClass: LineCell.self, data: LineModel(height: 20))
            make.addCellItem(cellClass: ExitCell.self, data: "Exit(退出)") { 
              data, indexPath in
                print("Exit Clicked")
            }
        }
        
        // handle tableview deselectRow
        self.tableView.t.didSelectItem { tableView, indexPath in
            tableView.deselectRow(at: indexPath, animated: true)
            // get item data (获取所配置的data)
            let data = tableView.t.cellItemData(forIndexPath: indexPath)
            print("did select indexPath(\(indexPath)), data = \(String(describing: data))")
        }
    }
}


// implement SwitchCell delegate
// 实现 cell 的内部代理方法
extension SettingController: SwitchCellDelegate {
    func onSwitchChanged(data: SettingModel, isOn: Bool) {
        print("\(data.title) is changed")
    }
}


////////////////////////// model ////////////////////
struct SettingModel {
    var title = ""
    var detail = ""
    var isOn = false
}

struct LineModel {
    var color: UIColor = .systemGroupedBackground
    var height: CGFloat = 10.0
}

更多的例子,请看代码 Demo

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.