Swift:如何在动态 UITableView 的自定义单元格中获取滑块的值?
Posted
技术标签:
【中文标题】Swift:如何在动态 UITableView 的自定义单元格中获取滑块的值?【英文标题】:Swift: How to get the value of a slider in a custom cell in a dynamic UITableView? 【发布时间】:2016-02-03 11:42:05 【问题描述】:我对以下场景有疑问:
我有一个带有动态单元格的UITableView
。其中,我使用自定义UITableViewCell
和UISlider
。如何获取滑块的值?
我创建了以下示例:(项目文件可以在这里下载:Link)
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
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)
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)
这是使用上述代码创建的 UITableView 的屏幕截图。
【问题讨论】:
【参考方案1】:尝试将此添加到您的 cellForRowAtIndexPath
函数中:
cell.cellSlider.tag = indexPath.row
cell.cellSlider.addTarget(self, action: "sliderValueChange:", forControlEvents: .ValueChanged)
然后在表函数之外添加类似:
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!
确保cellSlider
的目标的动作名称与函数的名称相同!而且因为它需要一个参数,所以不要忘记最后的冒号。
总结一下,这里有一个非常简单的例子:
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!
【讨论】:
@Benjamin1956 在cellForRowAtIndexPath
中添加了一行,将滑块的标签设置为它所在的行。这可以通过在目标函数中使用sender.tag
来访问:)
@Benjamin1956 还添加了一个完整的视图控制器文件 - 让您尽可能简单:)
我不敢相信我没有马上想到这个。很好的答案。【参考方案2】:
获取自定义单元格中滑块的值。
希望对你有所帮助,请在 Swift 中浏览 GitHub 代码并参考截图
https://github.com/appcoda/expandable-table-view
【讨论】:
【参考方案3】:另一种选择是使用ASValueTrackingSlider。注意是写在ObjectiveC
。
【讨论】:
以上是关于Swift:如何在动态 UITableView 的自定义单元格中获取滑块的值?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Swift 中动态更改包含 UICollectionView 单元格的 UITableView 单元格的高度?
如何在 swift 2.0 中提取 JSON 数据以在 UITableView 中动态应用?
iOS:在 Swift 中动态设置 UITableView 高度
UITableView:单击按钮时如何动态更改单元格高度?迅速