简体   繁体   中英

Eureka rangeSliderRow

Is there any way to create range slider with eureka?

Something like this.

<<< RangeSlideRow() {
                        $0.maxValue = 10000
                        $0.minValue = 0
                        $0.selectedMaxValue = 9000
                        $0.selectedMinValue = 5
                    }

There is no range slider in eureka because the UISlider does not support it. You will have to create your own RangeSlideRow based on some existing rangeslider implementations.

Check the SliderRow implementation in Eureka for reference.

I know I came late to the party but maybe next time this will be useful .

I encourage you to share your row in the Eureka Community if you think is going to be helpful to anyone :) Thanks!

Here is how I did it

swift 3 version

First Installed TTRangeSlider

Then created RangeViewCell.xib file with outlets

Then created file RangeViewCell.swift

Connected Outlets

import Foundation
import UIKit
import Eureka
import TTRangeSlider

public class RangeViewCell: Cell<String>, CellType, TTRangeSliderDelegate {

    @IBOutlet weak var rangeSlider: TTRangeSlider!
    @IBOutlet weak var titleLabel: UILabel!
    @IBOutlet weak var fromLabel: UILabel!
    @IBOutlet weak var toLabel: UILabel!

    private var umt = ""
    required public init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
    }

    public override func setup() {
        super.setup()
        rangeSlider.delegate = self
        accessoryType = .None
        editingAccessoryType =  .None
        textLabel?.text = nil
        detailTextLabel?.text = nil

        titleLabel.text = row.title

        rangeSlider.minValue        = rangeViewRow.minValue
        rangeSlider.maxValue        = rangeViewRow.maxValue

        if let selectedMin = rangeViewRow.selectedMinimumValue {
            rangeSlider.selectedMinimum = selectedMin
        }

        if let selectedMax = rangeViewRow.selectedMaximumValue {
            rangeSlider.selectedMaximum = selectedMax
        }

        if let step = rangeViewRow.step {
            rangeSlider.step = step
        }

        umt = ""
        if let umtC = rangeViewRow.unitMeassureText {
            umt = umtC
        }

        rangeSlider.enableStep = true
        updateLabelsValues(rangeSlider.selectedMinimum, max: rangeSlider.selectedMaximum)
        self.selectionStyle = UITableViewCellSelectionStyle.None
    }

    public override func update() {
        super.update()
        accessoryType = .None
        editingAccessoryType =  .None
        textLabel?.text = nil
        detailTextLabel?.text = nil
    }

    public override func didSelect() {

    }

    public func rangeSlider(sender: TTRangeSlider!, didChangeSelectedMinimumValue selectedMinimum: Float, andMaximumValue selectedMaximum: Float) {
        updateLabelsValues(selectedMinimum, max: selectedMaximum)
    }

    private var rangeViewRow: RangeViewRow {
        return row as! RangeViewRow
    }

    func updateLabelsValues(min:Float, max: Float) {

        if min == rangeSlider.minValue && max == rangeSlider.maxValue {
            fromLabel.hidden    = false
            toLabel.hidden      = true
            fromLabel.text = NSLocalizedString("All", comment: "Eureka range slider label if all selected")
        }
        else if min == rangeSlider.minValue && max != rangeSlider.maxValue {
            fromLabel.hidden    = true
            toLabel.hidden      = false

            toLabel.text = NSLocalizedString("to", comment: "Eureka range slider label to") + " " + max.description + " " + umt
        }
        else if min != rangeSlider.minValue && max == rangeSlider.maxValue {
            fromLabel.hidden    = false
            toLabel.hidden      = true

            fromLabel.text = NSLocalizedString("from", comment: "Eureka range slider label from") + " " + min.description + " " + umt
        }
        else {
            fromLabel.hidden    = false
            toLabel.hidden      = false
            fromLabel.text = NSLocalizedString("from", comment: "Eureka range slider label from") + " " + min.description + " " + umt
            toLabel.text = NSLocalizedString("to", comment: "Eureka range slider label to") + " " + max.description + " " + umt
        }

        row.value = "\(min):\(max)"
    }
}

public final class RangeViewRow: Row<String, RangeViewCell>, RowType {
    public var minValue: Float = 0.0
    public var maxValue: Float = 1.0
    public var selectedMinimumValue: Float?
    public var selectedMaximumValue: Float?
    public var unitMeassureText: String?
    public var step: Float?


    required public init(tag: String?) {
        super.init(tag: tag)
        cellProvider = CellProvider<RangeViewCell>(nibName: "RangeViewCell")
    }
}

And here how to use it

<<< RangeViewRow("square") {
                $0.title = NSLocalizedString("Square", comment: "Appartment square")
                $0.minValue = 0
                $0.maxValue = 1000
                $0.selectedMinimumValue = 0
                $0.selectedMaximumValue = 1000
                $0.step = 10
                $0.unitMeassureText = "m²"
                }.cellSetup({ (cell, row) -> () in
                    cell.rangeSlider.handleColor = Constants.Color.primaryColor
                    cell.rangeSlider.lineHeight = 3.0
                    cell.rangeSlider.tintColor = Constants.Color.primaryColor
                    cell.fromLabel.textColor = UIColor.darkGrayColor()
                    cell.toLabel.textColor = UIColor.darkGrayColor()
                })

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM