我在表格视图单元格中有一个滑块,我正在尝试将标签的文本设置为滑块的值.但是,文本未设置为更改的滑块值.我究竟做错了什么?
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)
}
Run Code Online (Sandbox Code Playgroud)
你可以使用一些技巧来做到这一点,首先你需要UISlider像建议的那样设置目标,另一点是获取所选行,你可以在下面的代码中实现保存在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
}
Run Code Online (Sandbox Code Playgroud)
另一个问题是设置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)"
}
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中我只UITableViewCell为了显示方式设置了内部的确切数字,但是强烈推荐的方法是迭代遍历所有UIView并UILabel在此问题中提出的方法中找到你的喜欢在Swift中的UIView中查找UILabel,因为数字可以更改.
正如一些人之前所说,通过Interface Builder更容易设置自定义单元格,但这取决于您.
我希望这对你有帮助.
| 归档时间: |
|
| 查看次数: |
5767 次 |
| 最近记录: |