首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在接口生成器中设计NSView子类,然后实例化它?

在接口生成器中设计NSView子类,然后实例化它?
EN

Stack Overflow用户
提问于 2009-07-03 04:55:10
回答 2查看 3.8K关注 0票数 2

因此,我有一个可以动态调整大小并使用NSView子类填充的NSTabView。我想在IB中设计页面,然后实例化它们并将它们添加到NSTabView中。我已经完成了NSView子类的程序化添加,但我不确定如何在IB中设计它们,然后实例化它们。

EN

回答 2

Stack Overflow用户

发布于 2009-07-03 05:43:57

我想我明白了。如果这不是一件好事,请让我知道。

我创建了一个新的xib文件,将其所有者设置为NSViewController,并将其" view“设置为我在xib中设计的自定义视图。

然后你只需要:

代码语言:javascript
运行
复制
NSViewController *viewController = [[NSViewController alloc] initWithNibName:@"MyViewXib" bundle:nil];
NSView *myView = [viewController view];
票数 8
EN

Stack Overflow用户

发布于 2009-07-03 14:45:25

@toastie有一个非常好的答案。我的是类似的,但需要更多的解释。

假设您已经有了一个控制器对象,并且您不希望仅仅为了获得一个视图而实例化一个新的控制器对象,并且假设您将需要此视图的多个副本(例如,您在IB中设计了一个自定义UITableViewCell,并且希望从UITableViewController中一次又一次地实例化它)。下面是你该怎么做的:

  1. 将一个新的IBOutlet添加到现有的类中,名为"specialView“(或类似的东西)。将其声明为(非原子的,保留的)一个名为" specialView“的新视图xib,并随心所欲地构建视图也可能很有帮助。
  2. 将该视图的文件所有者设置为控制器对象。
  3. 将文件所有者的specialView出口设置为新视图。
  4. 每当您需要在代码中创建视图的新副本时,只需执行以下操作。

(使格式正常工作的无用文本)

代码语言:javascript
运行
复制
NSNib * viewNib = [[NSNib alloc] initWithNibNamed:@"SpecialView" bundle:nil];
[viewNib instantiateNibWithOwner:self topLevelObjects:nil];
[viewNib release];
NSView * myInstantiatedSpecialView = [[[self specialView] retain] autorelease];
[self setSpecialView:nil];

是的,与其他方法相比,它的代码要多一点,但我更喜欢这种方法,因为视图显示在指定的IBOutlet中。我保留并自动释放视图,因为我喜欢在获得视图后将出口重置为空,这样它就可以立即准备加载视图的新副本。我还会指出,这方面的代码在iPhone上甚至更短,它需要一行代码来加载视图,而不是3行(就像在Mac上一样)。这行代码很简单:

代码语言:javascript
运行
复制
[[NSBundle mainBundle] loadNibNamed:@"SpecialView" owner:self options:nil];

哈!

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1077807

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档