iPad popover - How do you point to one segment in a segmented control?

邮差的信 提交于 2019-12-10 10:34:01

问题


I have an iPad popover and would like to present (point) to one segment in a segmented control. The code below works fine except the pointer points to the middle of the segmented control - I would prefer it points to the correct segment. ie segment 0 or segment 1.

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
   [printController presentFromBarButtonItem:self.navigationItem.rightBarButtonItem animated:YES completionHandler:completionHandler];// iPad
}

Many thanks.


回答1:


Code below may be useful for pointing popover to selected tab in segment control.

CGRect frame = [segmentControl frame];
frame =CGRectMake((frame.size.width/No. of segments * [segmentControl selectedSegmentIndex]), 0, frame.size.width/No. of segments, segmentControl.bounds.size.height);

[m_PopOver presentPopoverFromRect:frame inView:segmentControl permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];



回答2:


Try something like this (replace desiredSegmentIndex with the index of the segment the arrow should point to):

CGFloat desiredOffset = 0;
for (NSUInteger segmentIndex = 0; segmentIndex < desiredSegmentIndex; segmentIndex ++)
    desiredOffset += [segmentedControl widthForSegmentAtIndex:segmentIndex];
[printController presentFromRect:CGRectMake(desiredOffset, 0, [segmentedControl widthForSegmentAtIndex:desiredSegmentIndex], segmentedControl.bounds.size.height);
                          inView:segmentedControl
                        animated:YES
               completionHandler:completionHandler];

I have not tested this, but it (or something very similar) should work.




回答3:


Updated for Swift 3.0

var frame = segmentedControl.frame
frame = CGRect(x: frame.size.width/CGFloat(segmentedControl.numberOfSegments) * CGFloat(segmentedControl.selectedSegmentIndex),
               y: 0,
               width: frame.size.width/CGFloat(segmentedControl.numberOfSegments),
               height: segmentedControl.bounds.size.height)


popoverController?.sourceRect = frame


来源:https://stackoverflow.com/questions/9748735/ipad-popover-how-do-you-point-to-one-segment-in-a-segmented-control

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!