我在表格视图单元格内有一个滑块,并且我试图将标签的文本设置为滑块的值。但是,文本未设置为更改的滑块值。我在做什么错?
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = UITableViewCell()
if indexPath.section == 0 {
let slider = UISlider(frame: CGRectMake(0, 0, 320, 44))
slider.userInteractionEnabled = true
slider.minimumValue = 1
slider.maximumValue = 100
slider.value = 50
slider.continuous = true
cell.addSubview(slider)
println(cell.bounds)
let label = UILabel(frame: CGRectMake(260, -20, 100, 20))
var theValue = Int(slider.value)
label.text = "\(theValue)" + "mi."
cell.addSubview(label)
}
您可以使用一些技巧来进行操作,首先,需要根据建议将UISlider
的目标设置为目标,另一点是获取选定的行,您可以将其保存在[C0 ]属性tag
,如以下代码所示:
indexPath.row
另一个问题是设置override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! UITableViewCell
let slider = UISlider(frame: CGRectMake(0, 0, 100, 44))
slider.userInteractionEnabled = true
slider.minimumValue = 1
slider.maximumValue = 100
slider.value = 50
slider.continuous = true
// set the target to respond to changes.
slider.addTarget(self, action: "sliderValueChanged:", forControlEvents: UIControlEvents.ValueChanged)
// save the indexPath.row
slider.tag = indexPath.row
cell.addSubview(slider)
let label = UILabel(frame: CGRectMake(105, 0, 100, 20))
var theValue = Int(slider.value)
label.text = "\(theValue)" + "mi."
cell.addSubview(label)
return cell
}
文本,您可以通过获取单元格内部的确切视图来实现,如以下代码所示:
UILabel
在上面的代码中,我仅为设置func sliderValueChanged(sender: AnyObject) {
var slider = sender as! UISlider
let cell = self.tableView.cellForRowAtIndexPath(NSIndexPath(forRow: slider.tag, inSection: 0)) as UITableViewCell!
// If you know the exactly index
// var label = cell.subviews[4] as! UILabel
// label.text = "\(slider.value)"
// assuming you have only one `UILabel` inside your cell
for view in cell.subviews {
if let label = view as? UILabel {
label.text = "\(slider.value)"
}
}
}
内的确切数字而设置,但强烈建议使用的方法是遍历所有UITableViewCell
并找到您的UIView
,就像在此方法中建议的那样问题UILabel
,因为该数字可以更改。
正如某些人之前所说,通过Interface Builder设置自定义单元格比较容易,但这取决于您。
希望对您有帮助。
通常,您应该在滑块上添加一个动作:
Find UILabel in UIView in Swift
如此处所述:slider.addTarget(self, action: "sliderValueDidChange:", forControlEvents: .ValueChanged)
func sliderValueDidChange(sender:UISlider!)
{
println("value--\(sender.value)")
}
**由于您需要分别更改标签并在任何单元格中使用滑块的值,因此必须使用自定义TableViewCell类并轻松定义其中的滑块,标签和操作。
**我的建议:使用storyBoard,然后轻松设计视图并使用自定义的TableViewCell类。
一个适合您的示例表视图单元格类(类似于我自己的项目中的一个类:]]
http://www.apptuitions.com/programmatically-creating-uiview-uislider-uiswitch-using-swift/
您缺少滑块拖动操作。slide.addTarget(self,action:“ sliderValueDidChange”,forControlEvents:.ValueChanged)
将其添加到cellForRowAtIndexPath函数中: