132 lines
3.3 KiB
Swift
132 lines
3.3 KiB
Swift
|
|
|
|
|
|
|
|
import UIKit
|
|
import ContainerControllerSwift
|
|
|
|
// MARK: - Item
|
|
|
|
class ExampleSliderCellItem: TableAdapterItem {
|
|
|
|
init(height: CGFloat? = nil,
|
|
delegate: ExampleCellDelegate? = nil,
|
|
type: ExampleCell.Style = .default,
|
|
title: String? = nil,
|
|
|
|
value: Float? = nil,
|
|
maximumValue: Float? = nil,
|
|
minimumValue: Float? = nil,
|
|
callback: ((Int) -> Void)? = nil) {
|
|
|
|
let cellData = ExampleSliderCellData(type, title, value, maximumValue, minimumValue, height, delegate, callback)
|
|
|
|
super.init(cellClass: ExampleSliderCell.self, cellData: cellData)
|
|
}
|
|
}
|
|
|
|
// MARK: - Data
|
|
|
|
class ExampleSliderCellData: ExampleCellData {
|
|
|
|
// MARK: Properties
|
|
|
|
var value: Float
|
|
var maximumValue: Float
|
|
var minimumValue: Float
|
|
|
|
// MARK: Inits
|
|
|
|
init(_ type: ExampleCell.Style,
|
|
_ title: String? = nil,
|
|
_ value: Float? = nil,
|
|
_ maximumValue: Float? = nil,
|
|
_ minimumValue: Float? = nil,
|
|
_ cellHeight: CGFloat?,
|
|
_ delegate: ExampleCellDelegate?,
|
|
_ callback: ((Int) -> Void)?) {
|
|
|
|
let v = value ?? 1.0
|
|
|
|
self.value = v
|
|
self.maximumValue = maximumValue ?? v
|
|
self.minimumValue = minimumValue ?? 0.0
|
|
|
|
super.init(type, title, cellHeight, delegate, callback)
|
|
}
|
|
|
|
override public func cellHeight() -> CGFloat {
|
|
return 75.0
|
|
}
|
|
}
|
|
|
|
// MARK: - Cell
|
|
|
|
class ExampleSliderCell: ExampleCell {
|
|
|
|
// MARK: Properties
|
|
|
|
public var data: ExampleSliderCellData?
|
|
|
|
// MARK: Outlets
|
|
|
|
@IBOutlet override var selectedView: UIView? {
|
|
didSet { }
|
|
}
|
|
|
|
@IBOutlet private weak var slider: UISlider?
|
|
@IBOutlet private weak var titleLabel: UILabel?
|
|
@IBOutlet private weak var valueLabel: UILabel?
|
|
|
|
// MARK: Load
|
|
|
|
override func awakeFromNib() {
|
|
}
|
|
|
|
// MARK: Initialize
|
|
|
|
override func fill(data: TableAdapterCellData?) {
|
|
guard let data = data as? ExampleSliderCellData else { return }
|
|
self.data = data
|
|
|
|
titleLabel?.text = data.title
|
|
|
|
slider?.maximumValue = data.maximumValue
|
|
slider?.minimumValue = data.minimumValue
|
|
slider?.value = data.value
|
|
|
|
if let slider = slider {
|
|
let value = slider.value
|
|
valueLabel?.text = String(format: "%.1f", value)
|
|
data.value = value
|
|
}
|
|
}
|
|
|
|
@IBAction func sliderAction(_ sender: UISlider) {
|
|
valueLabel(slider: sender)
|
|
}
|
|
|
|
func valueLabel(slider: UISlider) {
|
|
guard let data = data else { return }
|
|
|
|
let value = slider.value
|
|
valueLabel?.text = String(format: "%.1f", value)
|
|
data.value = value
|
|
|
|
data.callback?(Int(value))
|
|
data.delegate?.exampleCell(self, type: data.type, value: CGFloat(value), endEditing: false)
|
|
}
|
|
|
|
@IBAction func touchUpInside(_ slider: UISlider) {
|
|
guard let data = data else { return }
|
|
|
|
let value = slider.value
|
|
valueLabel?.text = String(format: "%.1f", value)
|
|
data.value = value
|
|
|
|
data.callback?(Int(value))
|
|
data.delegate?.exampleCell(self, type: data.type, value: CGFloat(value), endEditing: true)
|
|
}
|
|
|
|
}
|