Ben*_*956 2 uitableview uislider swift
我遇到以下情况的问题:
我有UITableView
动态细胞.其中,我使用自定义的UITableViewCell
一个UISlider
.如何获得滑块的值?
我创建了以下示例:(项目文件可以在这里下载:链接)
SliderClass.swift
import UIKit
class SliderClass: NSObject {
var title: String
var subtitle: String
var sliderMinimum: Float
var sliderMaximum: Float
init(title: String, subtitle: String, sliderMinimum: Float, sliderMaximum: Float) {
self.title = title
self.subtitle = subtitle
self.sliderMinimum = sliderMinimum
self.sliderMaximum = sliderMaximum
}
}
Run Code Online (Sandbox Code Playgroud)
SliderTableViewCell.swift
import UIKit
class SliderTableViewCell: UITableViewCell {
@IBOutlet weak var cellTextLabel: UILabel!
@IBOutlet weak var cellDetailTextLabel: UILabel!
@IBOutlet weak var cellSlider: UISlider!
override func awakeFromNib() {
super.awakeFromNib()
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
}
Run Code Online (Sandbox Code Playgroud)
TableViewController.swift
import UIKit
class TableViewController: UITableViewController {
var slider: [SliderClass] = []
override func viewDidLoad() {
super.viewDidLoad()
title = "Slider"
let slider1 = SliderClass(title: "Title1", subtitle: "Subtitle1", sliderMinimum: 0, sliderMaximum: 100)
let slider2 = SliderClass(title: "Title2", subtitle: "Subtitle2", sliderMinimum: 0, sliderMaximum: 200)
slider = [slider1, slider2]
}
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return slider.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("sliderCell", forIndexPath: indexPath) as! SliderTableViewCell
let slider: SliderClass
slider = self.slider[indexPath.row]
cell.cellTextLabel.text = slider.title
cell.cellDetailTextLabel?.text = slider.subtitle
cell.cellSlider.minimumValue = slider.sliderMinimum
cell.cellSlider.maximumValue = slider.sliderMaximum
return cell
}
func sliderValueChange() {
// I need help here:
// Which slider changed to which value?
// var slider = ...
// var sliderValue = ...
// NSLog("Value of slider:%@ changed to:%i", slider, sliderValue)
}
}
Run Code Online (Sandbox Code Playgroud)
尝试将此添加到您的cellForRowAtIndexPath
函数:
cell.cellSlider.tag = indexPath.row
cell.cellSlider.addTarget(self, action: "sliderValueChange:", forControlEvents: .ValueChanged)
Run Code Online (Sandbox Code Playgroud)
然后在表函数之外添加如下内容:
func sliderValueChange(sender: UISlider) {
// Get the sliders value
var currentValue = Int(sender.value)
var sliderRow = sender.tag
// Do whatever you want with the value :)
// And now the row of the slider!
}
Run Code Online (Sandbox Code Playgroud)
确保cellSlider
's target 的动作名称与函数名称相同!因为它需要一个参数,所以不要忘记结尾的冒号.
总而言之,以下是上述实际应用的一个非常简单的例子:
import UIKit
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 2 // 2 rows in the cell, for demo purposes
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! TableViewCell
cell.slider.tag = indexPath.row
cell.slider.addTarget(self, action: "sliderChange:", forControlEvents: .ValueChanged)
return UITableViewCell()
}
func sliderChange(sender: UISlider) {
let currentValue = sender.value // get slider's value
let row = sender.tag // get slider's row in table
print("Slider in row \(row) has a value of \(currentValue)")
// example output - Slider in row 1 has a value of 0.601399
}
}
class TableViewCell: UITableViewCell {
@IBOutlet var slider: UISlider!
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3754 次 |
最近记录: |