You can add a category on UIViewController, do some detection and swizzle 
-[UIViewController viewWillAppear:] method.

On Apr 14, 2014, at 5:55, Luther Baker <lutherba...@gmail.com> wrote:

> Hello all,
> 
> I've run into an issue a few times and I'd like to see if someone has a
> good design suggestion to address my problem.
> 
> Consider an iPad or iPhone application based on a UINavigationController -
> that displays a 'menu' button in the UINavigationBar. The navbar renders
> UIBarButtonItems ... which we set per the UIViewController level via the
> UINavigationItem which is available to us via the UIViewController.
> 
> Now, I've got to render, for lack of a better term, a _global_ menu. I need
> the exact same button to simply stick to the upper left or right hand side
> of the nav bar. Consider that the button triggers the display of a
> UIPopoverController with a tableview which again, has _global_ style
> options. Specifically, and to keep the example simple, this menu has
> nothing to do with the child view controller. Maybe menu options include
> LOGOUT, or display SETTINGS or maybe there is an option to modally presents
> a report.
> 
> How can I get this to show up - without forcing every single view
> controller to _know_ about this global menu, jam it into their own
> self.navigationItem.leftBarButtonItem property and be sure to register a
> handler from somewhere to do the right thing.
> 
> What I think I _really_ want is a design wherein the view controller
> essentially _asks_ the navigation controller to either (a) add a very
> specific UIBarButtonItem to the navigation bar (which would allow the
> navigation controller to add the button to an array if a global button
> already existed) ... or (b) add a selection option - which the navigation
> bar could decide how to handle (create a new button, or insert into an
> existing menu, etc).
> 
> What makes rolling my own wrappers around this difficult is that those
> things are set via the UINavigationItem - which is very very specific to
> the view controller itself - it isn't directly available to the navigation
> controller per se.
> 
> I'm leaning towards adding something like:
> 
>    - (void)addBarButtonItem:(UIBarButtonItem *)barButtonItem
> toNavigationItem:(UINavigationItem *)navigationItem;
> 
>    - (void)addMenuOption:(id<MenuOption>)option
> toNavigationItem:(UINavigationItem *)navigationItem;
> 
> to either a category or subclass of the UINavigationController I am using
> to handle the case where I want to _add_ my requirements to whatever the
> UINavigationController is already displaying ... the problem is, if a view
> controller has _nothing_ to add to the nav bar, the global menu addition
> wouldn't get triggered ....
> 
> I wonder if I need to shift my focus to the UINavigationBar itself -- and
> intercept calls trying to create buttons ... but that be new territory for
> me as I've always just depended on the meta-informational style of using
> the view controller's UINavigationItem.
> 
> Any thoughts on this? Has anyone discovered a better way to do this without
> cluttering up every child view controller's SRP with the necessity to set
> buttons for someone else while retaining ultimate flexibility to set their
> own -- while still not having a way to 'insert' an option into an existing
> partially _global_ menu that is floating from vc to vc.
> 
> I essentially don't want view controllers setting these items directly - I
> want them to _add_ items - not _set_ them. And I'm not sure how to do this
> within the design paradigm of the view controller's navigation item
> instance - since that just puts me at one more level of direction (someone
> else reads that object and then builds out the UINavigationBar accordingly).
> 
> Ok - getting wordy and repetitive. Hope I've said enough to be clear what
> I'm trying to do.
> 
> Thanks,
> -Luther
> _______________________________________________
> 
> Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)
> 
> Please do not post admin requests or moderator comments to the list.
> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
> 
> Help/Unsubscribe/Update your Subscription:
> https://lists.apple.com/mailman/options/cocoa-dev/xcvista%40me.com
> 
> This email sent to xcvi...@me.com

Attachment: signature.asc
Description: Message signed with OpenPGP using GPGMail

_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to