我有一个UISegmentedControl
,有4个网段。当用户选择这些片段中的某些片段时,它们会实例化UIAlertController
。
在UIAlertController
上,您可以设置popoverPresentationController?.sourceView
以使警报控制器指向原始视图,该视图将在更大的设备(如iPad)上使用。
我尝试通过有效的UISegmentedControl
,但锚点始终是分段控件的左上角-而不是所选的分段。
我想将UISegmentedControl
的实际片段用作sourceView,但是UISegmentedControl
上没有包含这些片段的数组。
有一个subviews属性,其中包含一个视图数组。该数字与段的数量相对应,因此尽管找到了解决方案,但仍能找到。但是,如果我分配:
alertController.popoverPresentationController?.sourceView = segmentedControl.subviews[2]
...对于第三段,它有时有效,有时却无效。看起来此数组并非总是在屏幕上按段顺序排列。
如何找到要使用的正确子视图?
答案 0 :(得分:1)
我找到了解决方法:
alertController.popoverPresentationController?.sourceView = (segmentedControl.subviews.sorted { $0.frame.origin.x < $1.frame.origin.x })[segmentedControl.selectedSegmentIndex]
这将首先按照x坐标的顺序对视图进行排序。然后,我可以将segmentedControl.selectedSegmentIndex
用作索引。