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
}
我必须 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
}