UISlider不会在Swift中更新当前值

问题描述 投票:6回答:4

我在表格视图单元格内有一个滑块,并且我试图将标签的文本设置为滑块的值。但是,文本未设置为更改的滑块值。我在做什么错?

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)
 }
ios swift uilabel uislider
4个回答
5
投票

您可以使用一些技巧来进行操作,首先,需要根据建议将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设置自定义单元格比较容易,但这取决于您。

希望对您有帮助。


2
投票

通常,您应该在滑块上添加一个动作:

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/

1
投票

您缺少滑块拖动操作。slide.addTarget(self,action:“ sliderValueDidChange”,forControlEvents:.ValueChanged)


1
投票

将其添加到cellForRowAtIndexPath函数中:

© www.soinside.com 2019 - 2024. All rights reserved.