Re: Tabs window autoresizing.
Re: Tabs window autoresizing.
- Subject: Re: Tabs window autoresizing.
- From: Ryan Bates <email@hidden>
- Date: Mon, 9 Feb 2004 12:02:16 -0800
On Feb 9, 2004, at 10:55 AM, Antonio Carusone wrote:
The problem is that im really new to all this on some of what you
wrote doesnt make sense to me. Do you know if theres some kind of
tutorial for this?
If you have access to ADC TV then there is a session on there
explaining it. Other then that I don't know of any other tutorials, but
here's a little more detailed explenation:
First you need to set up a delegate for the NSTabView. Creating
delegates is a fairly common practice in Cocoa programming. You can do
this by connecting the "delegate" outlet to one of your custom object
instances using Interface Builder. NSTabView will send a message to its
delegate when a user clicks on a tab. Like this:
// NSTabView calls this upon user clicking tab
[delegate tabView:self didSelectTabViewItem:tabItem];
This means, if the "delegate" object has a method called
"tabView:didSelectTabViewItem:" then that method will be called. You
can perform any action in this method, including changing the size of
the window. Here's a basic way you would implement the method:
// in NSTabView's Delegate Object
- (void)tabView:(NSTabView *)tabView
didSelectTabViewItem:(NSTabViewItem *)tabViewItem
{
NSRect frame;
int height;
// Determine the height of the window based upon the selected tab
// The identifier is a usually a string defined for each
// tab through the Interface Builder info panel
if ([[tabViewItem identifier] isEqualTo:@"tabItem1"]) {
height = 400;
} else if ([[tabViewItem identifier] isEqualTo:@"tabItem2"]) {
height = 300;
} // etc...
// We now need to establish the new window frame.
// First grab the current window frame and we will
// adjust that.
frame = [[tabView window] frame];
// The "origin" of the frame is the bottom left corner
// So we will need to change that along with the height
// If we did not change the origin the window would
// animate up rather than down. Try both ways.
frame.size.height = height;
frame.origin.y += height;
// Now set the new window frame and animate it.
[[tabView window] setFrame:frame display:YES animate:YES]
}
Note: There is another delegate method called
"tabView:willSelectTabViewItem:" which may be the correct one to use.
Try both.
I haven't tested this code, so let me know if you get any errors.
Ryan
On Feb 9, 2004, at 10:55 AM, Antonio Carusone wrote:
Ryan,
Thanks man.
The problem is that im really new to all this on some of what you
wrote doesnt make sense to me. Do you know if theres some kind of
tutorial for this?
Ive seen it done before where the window animates to a new size. Thats
pretty much how I want it to work.
Thanks.
Antonio
On Feb 9, 2004, at 1:47 PM, Ryan Bates wrote:
One way to do this programmatically is to implement the
"tabView:didSelectTabViewItem:" NSTabView delegate method. In this
method you can call something like [window setFrame:frame
display:YES]. You can even have the window animate using [window
setFrame:frame display:YES animate:YES]. If you want to change the
speed of the animation you will need to subclass NSWindow and
override the "animationResizeTime:" method.
Ryan
_______________________________________________
cocoa-dev mailing list | email@hidden
Help/Unsubscribe/Archives:
http://www.lists.apple.com/mailman/listinfo/cocoa-dev
Do not post admin requests to the list. They will be ignored.
_______________________________________________
cocoa-dev mailing list | email@hidden
Help/Unsubscribe/Archives:
http://www.lists.apple.com/mailman/listinfo/cocoa-dev
Do not post admin requests to the list. They will be ignored.