如何更新UITableViewCell内的UISegmentedControl

时间:2016-12-20 13:38:05

标签: ios swift

表格的每一行都有一个位置控制,实现为分段控件。初始化表时,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的显示,但它没有效果。

1 个答案:

答案 0 :(得分:0)

这种更新表格单元格中控件的方法有效。

它似乎不起作用的原因是实例化shadePositionControls数组时出现了一个错误。它被实例化如下,它在数组的零位置添加了一个不需要的segmentedControl。

var shadePositionControls = [UISegmentedControl()]

因此,statusPoll中的代码更新了伪造的segmentedControl,而不是预期的。

修复程序将数组创建更改为:

var shadePositionControls:[UISegmentedControl] = []