表格的每一行都有一个位置控制,实现为分段控件。初始化表时,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
}
}
}
我希望segmentedControl得到更新,并刷新视图以反映更新?是否有更好的方法来更新每个单元格的segmentControl而不是创建它们的数组?我尝试使用shadeTableView.reloadData()刷新segmentedControl的显示,但它没有效果。
答案 0 :(得分:0)
这种更新表格单元格中控件的方法有效。
它似乎不起作用的原因是实例化shadePositionControls数组时出现了一个错误。它被实例化如下,它在数组的零位置添加了一个不需要的segmentedControl。
var shadePositionControls = [UISegmentedControl()]
因此,statusPoll中的代码更新了伪造的segmentedControl,而不是预期的。
修复程序将数组创建更改为:
var shadePositionControls:[UISegmentedControl] = []