Thanks! On Sep 5, 2011, at 11:07 AM, Ken Thomases wrote:
> On Sep 5, 2011, at 10:32 AM, William Squires wrote: > >> While I can create the UI easily enough in IB, what I don't understand is >> how to actually load, instantiate, and display the window from my view >> controller object. > > A common approach is to: > > * Create a custom subclass of NSWindowController. Since a custom window > controller is usually intimately tied to a specific NIB, one usually > hard-codes the NIB name in the init method. That is, your custom init method > will invoke [super initWithWindowNibName:@"YourNIBName"]. (Note: this is a > window controller, which is different from a view controller.) > > * Create a NIB containing your window. In the Identity inspector, set the > class of the File's Owner placeholder to be your custom window controller > class. > > * Connect the "window" outlet of File's Owner to the window in the NIB. If > your custom window controller has other outlets, connect them, too. > > * In the code which knows that it wants to display the window (often the app > controller), instantiate your custom window controller class. Then either > invoke -showWindow: on it or request its window property and directly > manipulate it -- for example, send it -makeKeyAndOrderFront:. > > >> [...] how do I: >> >> 1) make sure the window isn't displayed until all it's views (controls) have >> had a chance to initialize their default (visual) state properly > > Either the views should obtain their state on demand, such that the very act > of drawing themselves makes sure they are showing their proper state, or they > should initialize themselves in -awakeFromNib or the like. In other words, > this isn't usually something you have to manage manually from the point of > view of the code that displays the window nor the window controller. If the > window controller does need to set stuff up after the window was loaded, do > that in an override of -windowDidLoad. > >> 2) actually display the window, either modally, or not. > > Described above. To run a window modally, use -[NSApplication > runModalForWindow:]. > >> 3) if modal, how does my client code make sure it doesn't return from the >> operation until the user closes the window (by clicking the close box, or by >> dismissing it in code from an IBAction tied to an NSButton whose caption is >> "Done" or some such.) > > -runModalForWindow: won't return until something invokes -stopModal, > -stopModalWithCode:, or -abortModal. > >> 4) Pass information to/from the client code and the view controller? > > The code which instantiates the window controller should either pass > arguments to a custom initializer of your own design or simply invoke > methods, such as setters, to configure the window controller. > >> 5) Prevent the window from closing (if non-modal) if the contents are >> 'dirty'? > > Set the window controller to be the window's delegate by connecting the > window's delegate outlet to File's Owner in the NIB. Then have the window > controller implement -windowShouldClose:. > > Regards, > Ken > _______________________________________________ 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: http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com