ios - 如何更新 UITableViewCell 内的 UISegmentedControl

标签 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
        }
    }
}

要更新分段控件并刷新 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/

相关文章:

ios - Xcode 无法使用 Cocoapods 找到引用的 Storyboard

objective-c - 如何在应用程序中应用晕影和复古图像滤镜

swift - 使用 Swift 初始化 int4;错误或预期的行为?

ios - Swift 在上面添加一行来控制

ios - 在 swift 3,4 中上传相机胶卷中的重复图像

ios - swift&parse.com : converting String to AnyObject?

ios - 如何计算当前月/年的天数

ios - Firebase 谷歌登录崩溃 Swift

ios - 如何在 Swift 中使用命名空间?

iOS 10.3 - 如何以编程方式更改应用程序图标