gpt4 book ai didi

ios - UISegmentedControl.noSegment 停止与 Xcode 11、iOS 13 配合使用

转载 作者:行者123 更新时间:2023-12-02 05:04:58 25 4
gpt4 key购买 nike

我有两个相互堆叠的分段控件,每个控件都有两个选项,因此搜索字段有一个 2x2 的过滤选项网格。这工作得很好,但我刚刚更新到 Xcode 11 和 UISegmentedControl.noSegment当我尝试根据用户选择更新它时,它已停止工作。但是,当我将初始值设置为 .noSegment 时,它会起作用。在属性观察器中。 isMomentary设置为 false。 socket 均设置正确。 UISegmentedControl 有更新吗我缺少的行为,还是这是一个错误?

显示新的不正确行为 here .

当前代码之前可以工作,但更新后停止工作:

@IBOutlet private weak var segmentedControlOne: UISegmentedControl!

@IBOutlet private weak var segmentedControlTwo: UISegmentedControl! {
didSet {
// Start with no segment selected on this control. This works!
segmentedControlTwo.selectedSegmentIndex = -1
}
}

@IBAction private func oneIndexChanged(_ sender: UISegmentedControl) {
//Turn off selection on second control while first is selected
segmentedControlTwo.selectedSegmentIndex = UISegmentedControl.noSegment

let i = sender.selectedSegmentIndex
if i == 0 {
searchType = .users
} else {
searchType = .contributors
}
}

@IBAction private func twoIndexChanged(_ sender: UISegmentedControl) {
//Turn off selection on first control while second is selected
segmentedControlOne.selectedSegmentIndex = UISegmentedControl.noSegment

let i = sender.selectedSegmentIndex
if i == 0 {
searchType = .articles
} else {
searchType = .categories
}
}

最佳答案

感谢您提出这个问题。我遇到了同样的问题,所以很高兴得到一些确认,这不仅仅是我遗漏的东西。

虽然 Apple 希望尽快修复此错误,但我通过重新创建段实现了以下解决方法。此代码示例基于以图像作为分段的 UISegmentedControl,您当然可以对标题字符串实现相同的方法:

public func resetSegmentedControl(_ control: UISegmentedControl) {
if #available(iOS 13, *) {
// workaround: recreate the segments
let numSegments = control.numberOfSegments
let segmentImages = (0..<numSegments).compactMap { control.imageForSegment(at: $0) }
control.removeAllSegments()
for (index, image) in segmentImages.enumerated() {
control.insertSegment(with: image, at: index, animated: false)
}
} else {
// for earlier versions of iOS, just reset the selectedSegmentIndex
control.selectedSegmentIndex = UISegmentedControl.noSegment
}
}

移除和重新插入片段时会有轻微的闪烁,但对我来说,这比损坏的状态更好。

编辑

正如 @matt 在下面的评论中指出的,所需要的只是调用 setNeedsLayout,即:

control.selectSegmentIndex = .noSegment
control.setNeedsLayout()

关于ios - UISegmentedControl.noSegment 停止与 Xcode 11、iOS 13 配合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58067441/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com