表的每一行都有一个作为分段控件实现的位置控件。当表初始化时,selectedSegment是未知的。我想从不同的函数更新 selectedSegment
。
当前代码创建了一个可以由函数访问的segmentControls
数组。程序运行正常,但 segmentControl
未更新。
以下是创建表格单元格的代码:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier, for: indexPath) as UITableViewCell
cell.textLabel?.text = self.shades[indexPath.row]
let shadePositionControl = UISegmentedControl (items: [#imageLiteral(resourceName: "Icon-Closed").withRenderingMode(.alwaysOriginal),
#imageLiteral(resourceName: "Icon-Half").withRenderingMode(.alwaysOriginal),
#imageLiteral(resourceName: "Icon-Open").withRenderingMode(.alwaysOriginal)])
shadePositionControl.frame = CGRect(x: cell.bounds.origin.x + 200, y: cell.bounds.origin.y + 6, width: 90, height: 30)
shadePositionControl.tag = indexPath.row
shadePositionControl.addTarget(self, action: #selector(self.shadePositionControlAction), for: .valueChanged)
shadePositionControls.append(shadePositionControl)
cell.contentView.addSubview(shadePositionControl)
return cell
}
这是更新 selectedSegment 的函数:
func statusPoll() {
myShade.getShadow() //gets the state from AWS-IOT
if myShade.gotState() {
let shadeIndex = 0 //hard-coded during proof-of-concept testing
let position = myShade.getDesiredState(key: "position") as! String
switch position {
case "closed": shadePositionControls[shadeIndex].selectedSegmentIndex = 0
case "half": shadePositionControls[shadeIndex].selectedSegmentIndex = 1
case "open": shadePositionControls[shadeIndex].selectedSegmentIndex = 2
default: shadePositionControls[shadeIndex].selectedSegmentIndex = -1
}
}
}
要更新分段控件并刷新 View 以反射(reflect)更新,我缺少什么?有没有比创建它们的数组更好的方法来更新每个单元格的segmentControl?我尝试使用shadeTableView.reloadData()刷新segmentedControl的显示,但没有效果。
最佳答案
这种更新表格单元格中控件的方法是有效的。
它似乎不起作用的原因是实例化 shadePositionControls 数组时存在错误。它的实例化如下,在数组的零位置添加了一个不需要的segmentedControl。
var shadePositionControls = [UISegmentedControl()]
因此,statusPoll 中的代码正在更新伪造的分段控件,而不是预期的控件。
修复方法是将数组创建更改为:
var shadePositionControls:[UISegmentedControl] = []
关于ios - 如何更新 UITableViewCell 内的 UISegmentedControl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41243695/