Friday, 15 August 2014

objective c - How do you specify the origin of the arrow on a popover segue with OS X 10.10 storyboards -



objective c - How do you specify the origin of the arrow on a popover segue with OS X 10.10 storyboards -

i'm playing around storyboarding in os x 10.10 app. have nstableview that, when click specific row opens segue goes popover contains nsviewcontroller.

how specify origin nspoint of arrow popover? right now, points nstableview in middle. assumed in prepareforsegue, can't seem figure out. prepareforsegue doesn't seem have understanding nsviewcontroller contained in nspopover

any ideas?

you should file enhancement request radar behavior if think should provided framework in way.

but workaround in meantime, can create own custom nsstoryboardsegue subclass help this.

@interface tablepopoversegue : nsstoryboardsegue @property (weak) nstableview *anchortableview; @property nsrectedge preferrededge; @property nspopoverbehavior popoverbehavior; @end @implementation tablepopoversegue - (void)perform { if ([self anchortableview]) { nsinteger selectedcolumn = [[self anchortableview] selectedcolumn]; nsinteger selectedrow = [[self anchortableview] selectedrow]; // if can pick specific row show from, that; otherwise fallback showing tableview nsview *anchorview = [self anchortableview]; if (selectedrow >= 0) { anchorview = [[self anchortableview] viewatcolumn:selectedcolumn row:selectedrow makeifnecessary:no]; } // utilize presentation api popover can dismissed using -dismisscontroller:. [[self sourcecontroller] presentviewcontroller:[self destinationcontroller] aspopoverrelativetorect:[anchorview bounds] ofview:anchorview preferrededge:[self preferrededge] behavior:[self popoverbehavior]]; } } @end

this can specified in ib in inspector panel segue (just ios):

and in source view controller's prepareforsegue:, can set segue:

- (void)prepareforsegue:(nsstoryboardsegue *)segue sender:(id)sender { if ([segue iskindofclass:[tablepopoversegue class]]) { tablepopoversegue *popoversegue = (tablepopoversegue *)segue; popoversegue.preferrededge = nsmaxxedge; popoversegue.popoverbehavior = nspopoverbehaviortransient; popoversegue.anchortableview = [self tableview]; } }

objective-c osx nsviewcontroller nspopover

No comments:

Post a Comment