Swift: UISegmentedControl 最后一个索引未被选中

Swift: UISegmentedControl last index is not selected

我必须 select UISegmentedControl 以编程方式在 viewWillAppear() 上建立索引。

switch shirtSize {
    case ProfilingPreferredShirtSize.xs.rawValue:
        shirtSizeSegmentedControl.selectedSegmentIndex = 0
    case ProfilingPreferredShirtSize.s.rawValue:
        shirtSizeSegmentedControl.selectedSegmentIndex = 1
    case ProfilingPreferredShirtSize.m.rawValue:
        shirtSizeSegmentedControl.selectedSegmentIndex = 2
    case ProfilingPreferredShirtSize.l.rawValue:
        shirtSizeSegmentedControl.selectedSegmentIndex = 3
    case ProfilingPreferredShirtSize.xl.rawValue:
        shirtSizeSegmentedControl.selectedSegmentIndex = 4
    default:
        break
}

当最后一个索引 (4) 被 selected 时,相应的段不会以图形方式 selected。当我手动点击最后一段时,它变成了 selected 但没有调用 valueChange 回调。这意味着 selectedSegmentIndex 已经设置,这只是一个图形错误。我能做什么?对于所有其他值 (0-3),它完美地工作。

你可以试试:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    perform(#selector(switchShirtSizeSegment(shirtSize:)), with: nil, afterDelay: 0.0)
}

@objc func switchShirtSizeSegment(shirtSize: Int) {
    switch shirtSize {
        case ProfilingPreferredShirtSize.xs.rawValue:
            shirtSizeSegmentedControl.selectedSegmentIndex = 0
        case ProfilingPreferredShirtSize.s.rawValue:
            shirtSizeSegmentedControl.selectedSegmentIndex = 1
        case ProfilingPreferredShirtSize.m.rawValue:
            shirtSizeSegmentedControl.selectedSegmentIndex = 2
        case ProfilingPreferredShirtSize.l.rawValue:
            shirtSizeSegmentedControl.selectedSegmentIndex = 3
        case ProfilingPreferredShirtSize.xl.rawValue:
            shirtSizeSegmentedControl.selectedSegmentIndex = 4
        default:
            break
    }
}

请尝试刷新布局:

setNeedsLayout();

使用 UISegmentControl 的瞬时 属性。

尝试以下 -

    switch shirtSize {
      case ProfilingPreferredShirtSize.xs.rawValue:
           shirtSizeSegmentedControl.selectedSegmentIndex = 0
      case ProfilingPreferredShirtSize.s.rawValue:
           shirtSizeSegmentedControl.selectedSegmentIndex = 1
      case ProfilingPreferredShirtSize.m.rawValue:
           shirtSizeSegmentedControl.selectedSegmentIndex = 2
      case ProfilingPreferredShirtSize.l.rawValue:
           shirtSizeSegmentedControl.selectedSegmentIndex = 3
      case ProfilingPreferredShirtSize.xl.rawValue:
           shirtSizeSegmentedControl.momentary = true
           shirtSizeSegmentedControl.selectedSegmentIndex = 4
           shirtSizeSegmentedControl.momentary = false
      default:
           break
}