【问题标题】:Cocoa - Display xib on another xibCocoa - 在另一个 xib 上显示 xib
【发布时间】:2012-04-03 04:00:08
【问题描述】:

谁能告诉我如何(或指导我了解有关信息)在另一个 .xib(笔尖)上显示 .xib(笔尖)。

我希望如何放置它,这样我就可以像这样以编程方式在主笔尖周围移动它(这显然行不通)

- (void)drawRect:(NSRect)dirtyRect
{

    NSRect customView = NSMakeRect(pos1, pos1, 200, 100);

    [[NSBundle mainBundle] loadNibNamed:@"secondXib" owner:self];

    NSRectFill (customView);
}

我希望在 Mac OS X(不是 iPhone)上这样做。 (顺便说一句,使用 xCode 4 会有所作为)

【问题讨论】:

    标签: objective-c macos cocoa xib nib


    【解决方案1】:

    非常感谢, 另一种选择(这基本上是非编程方式)是在您的第一个 xib 中添加一个 NSViewController 对象,并将其设置为您使用您指定的 nib 名称。 在您的第二个 xib 中,不要忘记在视图的“自定义类”字段中设置类名(以及文件所有者上的 NSViewController),否则将不起作用。

    【讨论】:

      【解决方案2】:

      您可以使用 NSViewController 从另一个 nib 轻松加载视图。在您的 nib 中,您只需将 File's Owner 的自定义类设置为 NSViewController 并连接 File's Ownerview 插座以指向您想要的视图加载。然后你可以这样做:

      //create an NSViewController and use it to load the nib
      NSViewController* vc = [[NSViewController alloc] initWithNibName:@"YourNibName" bundle:nil];
      //get the view from the view controller
      NSView* loadedView = [vc view];
      //release the view controller so we don't leak
      [vc release];
      //add the view as a subview of your main view
      [mainView addSubview:loadedView];
      //position the view
      [loadedView setFrameOrigin:NSMakePoint(100.0, 100.0)];
      

      您无需在drawRect: 中执行任何操作。子视图会自己绘制,如果移动子视图会自动调用drawRect:

      您应该阅读View Programming Guide for Cocoa。理解视图的工作原理至关重要,从您的问题中可以清楚地看出您还没有这种理解。

      您还应该阅读Cocoa Drawing Guide

      【讨论】:

      • 如何从YourNibName 连接到代码进入的控制器? (澄清一下,不是NSViewController* vc,而是包含所有代码的控制器类)
      • 你不能,也不应该。视图控制器应该管理所有这些,它应该通过委托方法或其他方法与其拥有的对象对话。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-25
      • 2016-03-05
      • 1970-01-01
      • 2014-02-13
      相关资源
      最近更新 更多