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

时间:2018-11-07 11:11:21

标签: ios swift uisegmentedcontrol

我有一个UISegmentedControl,有4个网段。当用户选择这些片段中的某些片段时,它们会实例化UIAlertController

UIAlertController上,您可以设置popoverPresentationController?.sourceView以使警报控制器指向原始视图,该视图将在更大的设备(如iPad)上使用。

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

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

有一个subviews属性,其中包含一个视图数组。该数字与段的数量相对应,因此尽管找到了解决方案,但仍能找到。但是,如果我分配:

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

...对于第三段,它有时有效,有时却无效。看起来此数组并非总是在屏幕上按段顺序排列。

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

1 个答案:

答案 0 :(得分:1)

我找到了解决方法:

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

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