我在表格视图单元格中有一个滑块,我正在尝试将标签的文本设置为滑块的值.但是,文本未设置为更改的滑块值.我究竟做错了什么?
func tableView(tableView: UITableView,cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = UITableViewCell() if indexPath.section == 0 { let slider = UiSlider(frame: CGRectMake(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的目标,另一点是获取所选的行,你可以在tagPath属性中保存它.如下面的代码:
override func tableView(tableView: UITableView,cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier("Cell",forIndexPath: indexPath) as! UITableViewCell let slider = UiSlider(frame: CGRectMake(0,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,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,就像在这个问题Find UILabel in UIView in Swift中提出的方法一样,因为数字可以改变.
正如一些人之前所说,通过Interface Builder更容易设置自定义单元格,但这取决于您.
我希望这对你有帮助.