将子视图放在另一个视图上

时间:2011-02-10 09:24:01

标签: objective-c cocoa


我已经成功地将xib文件中的视图作为子视图动态加载到窗口(另一个xib)上 据我所知,默认情况下,该子视图被加载到窗口的第一个象限中,即子视图位于窗口的最左下方。我的窗户也是如此。
现在的问题是如何将子视图放在窗口的其他位置。换句话说,如果我想将子视图放在窗口的顶部,我将如何实现它?

如果我可以获得NSRect和NSwindow对象框架的解释,我真的很感激。
如果任何API中有任何方法,请指导我们..提前感谢...

更新:

@interface ViewAvailableItemsWindowController : NSObject {
    IBOutlet NSWindow * viewAvailableItemsWindow; //Window in question
    IBOutlet NSView * viewAvailableItemsView; //View in question

    ItemSearchViewController * instanceItemSearchView; //ViewController object 
}

@end


@implementation ViewAvailableItemsWindowController

-(void)awakeFromNib{
    [viewAvailableItemsWindow makeKeyAndOrderFront:nil];
    instanceItemSearchView = [[ItemSearchViewController alloc]initWithNibName:@"ItemSearchView" bundle:nil] ; //Initiating the viewController with the nib for the view.
    [viewAvailableItemsView addSubview:[instanceItemSearchView view]];  //Adding the subview to the window..

}

-(void)dealloc{
    [instanceItemSearchView release];
    [super dealloc];
}

@end

这会在窗口的第一个象限上加载视图 - 我的意思是窗口的左下角。我希望将视图放在窗口的顶部中心。

1 个答案:

答案 0 :(得分:2)

NSRect是一个矩形。它由原点和大小组成。原点是一个点,x和y。尺寸是宽度和高度。从现在开始,我将输入{{x,y},{width,height}}

每个视图都有一个框架。视图的框架是该视图在其超视图中的位置。每个视图也有一个边界。视图的边界定义视图的内部坐标系。默认情况下,0位于左下角,随着X和Y的增加,您向右和向上移动。

示例:如果一个视图的边界为{{0,0},{100,100}},并且您将另一个视图放在该视图中并将其框架设置为{{25,50},{10, 10}}然后子视图的大小为10x10,位于左边缘右侧25点,距离底部50点。

边界大小几乎总是与帧大小相同。除非您打算缩放或移动所有子视图和自定义绘图,否则通常不会设置或调整视图的边界 - 这是一项高级操作。

所以如果你有这样的事情:

+-------------------+
|     +----------+  |
|     |   +---+  |  |
|  A  | B | C |  |  |
|     |   +---+  |  |
|     +----------+  |
|                   |
|                   |
+-------------------+

其中每个框表示一个NSView,每个视图都是下一个视图的子视图。所以A包含B,包含C.每个视图的边界和框架可能是这样的:

      Bounds                Frame
      {{X, Y},  {W,  H}}    {{ X,  Y},  {W,  H}}
A     {{0, 0}, {30, 30}}    {{ 0,  0}, {30, 30}}
B     {{0, 0}, {20, 15}}    {{20, 20}, {20, 15}}
C     {{0, 0}, {10, 10}}    {{10, 10}, {10, 10}}