所以我有一个NSTabView,我正在动态调整和填充NSView子类.我想在IB中设计页面然后实例化它们并将它们添加到NSTabView.我得到了程序化添加NSView子类,但我不知道如何在IB中设计它们然后实例化它们.
我想我明白了.如果这不是一件好事,请告诉我.
我创建了一个新的xib文件,将其File的Owner设置为NSViewController并将其"view"设置为我在xib中设计的自定义视图.
那么你只需要:
NSViewController *viewController = [[NSViewController alloc] initWithNibName:@"MyViewXib" bundle:nil];
NSView *myView = [viewController view];
Run Code Online (Sandbox Code Playgroud)
@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];
Run Code Online (Sandbox Code Playgroud)
是的,它比其他方式更多的代码,但我更喜欢这种方法,因为视图显示在指定的IBOutlet中.我保留并自动释放视图,因为我希望在有视图后将插座重置为nil,因此可以立即准备加载视图的新副本.我还要指出iPhone上的代码更短,这需要一行加载视图,而不是3(就像在Mac上一样).这条线很简单:
[[NSBundle mainBundle] loadNibNamed:@"SpecialView" owner:self options:nil];
Run Code Online (Sandbox Code Playgroud)
HTH!
| 归档时间: |
|
| 查看次数: |
3800 次 |
| 最近记录: |