 @available(iOS 11.0, *)
 public protocol SDPickerViewDataSource : AnyObject {
     
-    func numberOfRows(in pickerView: SDPickerView) -> Int
+    func numberOfSections(in pickerView: SDPickerView) -> Int
+    
+    func pickerView(_ pickerView: SDPickerView, numberOfRowsInSection section: Int) -> Int
+}
+
+@available(iOS 11.0, *)
+extension SDPickerViewDataSource {
+    
+    public func numberOfSections(in pickerView: SDPickerView) -> Int {
+        return 1
+    }
 }
 
 @available(iOS 11.0, *)

        return 44
    }
    
    public func viewToPresent(in pickerView: SDPickerView, reusing view: UIView?) -> UIView {
        return self.pickerView(pickerView, viewForRow: pickerView.selectedRow, reusing: view)
    }
    
    public func pickerView(_ pickerView: SDPickerView, titleForRow row: Int) -> String? {
        return nil
    }
    
    public func pickerView(_ pickerView: SDPickerView, attributedTitleForRow row: Int) -> NSAttributedString? {
        return self.pickerView(pickerView, titleForRow: row).map { NSAttributedString(string: $0) }
    }
    
    public func pickerView(_ pickerView: SDPickerView, viewForRow row: Int, reusing view: UIView?) -> UIView {
        
        let view = view ?? UIView()
        
        let label = view.subviews.first as? UILabel ?? UILabel()
        label.attributedText = self.pickerView(pickerView, attributedTitleForRow: row)
        
        view.subviews.first?.removeFromSuperview()
        view.addSubview(label)

        self.tableView.separatorStyle = .none
    }
    
    override func numberOfSections(in tableView: UITableView) -> Int {
        return delegate?.numberOfSections ?? 0
    }
    
    override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
        guard let header = view as? UITableViewHeaderFooterView else { return }
        view.tintColor = delegate?.pickerHeaderBackgroundColor ?? .clear
        header.textLabel?.textColor = delegate?.pickerHeaderTextColor ?? .clear
    }
    
    override func tableView(_ tableView: UITableView, willDisplayFooterView view: UIView, forSection section: Int) {
        guard let header = view as? UITableViewHeaderFooterView else { return }
        view.tintColor = delegate?.pickerFooterBackgroundColor ?? .clear
        header.textLabel?.textColor = delegate?.pickerFooterTextColor ?? .clear
    }
    
    override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        guard let delegate = self.delegate else { return nil }
        return delegate.delegate?.pickerView(delegate, titleForHeaderInSection: section)
    }
    
    override func tableView(_ tableView: UITableView, titleForFooterInSection section: Int) -> String? {
        guard let delegate = self.delegate else { return nil }
        return delegate.delegate?.pickerView(delegate, titleForFooterInSection: section)
    }
    
    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return delegate?.numberOfRows(in: section) ?? 0
    }
    
    override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
