对于 alertController:什么是 UISegmentedControl 中选定段的 sourceView

For an alertController: what is the sourceView of a selected segment in a UISegmentedControl

我有一个 UISegmentedControl 有 4 个片段。其中一些段在用户选择时实例化 UIAlertController

UIAlertController 上,您可以设置 popoverPresentationController?.sourceView 让警报控制器指向原点视图,这将在 iPad 等大型设备上使用。

我尝试传递有效的 UISegmentedControl,但锚点始终位于分段控件的左上角 - 而不是所选的分段。

我想使用 UISegmentedControl 的实际段作为 sourceView,但是 UISegmentedControl 上没有包含这些段的数组。

有一个包含视图数组的子视图 属性。该数字对应于段数,所以我虽然找到了解决方案。但是如果我分配:

alertController.popoverPresentationController?.sourceView = segmentedControl.subviews[2]

...对于第三段,它有时有效,有时无效。看起来这个数组并不总是按照屏幕上的段顺序排列。

如何找到要使用的正确子视图?

我找到了解决方案:

alertController.popoverPresentationController?.sourceView = (segmentedControl.subviews.sorted { [=10=].frame.origin.x < .frame.origin.x })[segmentedControl.selectedSegmentIndex]

这将首先按照 x 坐标的顺序对视图进行排序。然后我可以使用 segmentedControl.selectedSegmentIndex 作为索引。