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.
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];
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.
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