所以我有一个NSTabView,我正在动态调整大小并填充NSView子类。我想在IB中设计页面然后实例化它们并将它们添加到NSTabView。我得到了程序化添加NSView子类,但我不确定如何在IB中设计它们然后实例化它们。
答案 0 :(得分:8)
我想我明白了。如果这不是一件好事,请告诉我。
我创建了一个新的xib文件,将其File的Owner设置为NSViewController并将其“view”设置为我在xib中设计的自定义视图。
然后你需要:
NSViewController *viewController = [[NSViewController alloc] initWithNibName:@"MyViewXib" bundle:nil];
NSView *myView = [viewController view];
答案 1 :(得分:6)
@toastie有一个非常好的答案。我的情况类似,但需要更多解释。
假设您已经拥有了一个控制器对象,并且您不想实例化一个新的控制器对象只是为了获取视图,并且假设您需要此视图的多个副本(例如,你已经在IB中设计了一个自定义UITableViewCell,你想要从你的UITableViewController一次又一次地实例化它。以下是您将如何做到这一点:
(免费文本以使格式化正常工作)
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中。我保留并自动释放视图,因为我希望在有视图后将插座重置为nil,因此可以立即准备加载视图的新副本。我还要指出iPhone上的代码更短,这需要一行加载视图,而不是3(就像在Mac上一样)。那条线很简单:
[[NSBundle mainBundle] loadNibNamed:@"SpecialView" owner:self options:nil];
HTH!