Elb*_*mio 6 cocoa view objective-c nib viewcontroller
我已经问过如何让自定义视图重复自己分成几个单独的副本,并告诉我应该使用NSNib或NSViewController.我在nib文件中有一个自定义视图,每当用户单击一个按钮时,我想要显示一个新的nib视图副本,同时仍然在屏幕上的其他位置维护前一个,同时运行多达十个单独的视图.由于这些中的每一个在出现之前都需要一些用户输入,我认为它们必须是每个单独的对象或某些东西,以使它们不同并且不会相互干扰.
我可以使用第一个视图
NSNib *nib = [[NSNib alloc] initWithNibNamed:@"IndividualTimers" bundle:nil];
[nib instantiateNibWithOwner:self topLevelObjects:nil];
Run Code Online (Sandbox Code Playgroud)
但是,每次按下按钮时,只会重新启动相同的视图,我可以看出两个视图已合并到该视图中,因为显示在其上的计时器开始滴答速度的两倍,但它们应该在两个不同的实例中独立显示的观点.
有人告诉我应该使用设置不同文件的所有者.
到目前为止,人们一直很有帮助,但不是很具体.我不知道我应该设置什么文件的所有者,如何以编程方式创建一个新对象来保存加载的笔尖的每个实例(如果这甚至是如何完成),或者我是否需要为每个加载单独的对象.
基本上,我想知道如何获取一个nib文件,并将其用作模板,最多可以加载十次,而每个(最多)十个视图同时运行,但是独立运行.
我非常感谢您提供的任何具体帮助,因为这是我在Xcode编程时遇到的最大问题.我被困了几个星期.谢谢你的帮助.
实例化nib文件时,它会将未归档的对象分配给其文件所有者的属性.
如果将IBOutlet UIView属性连接到nib中的根视图,则在实例化nib时,新创建的对象将分配给该属性.
为了在每次实例化nib时创建新对象,您需要将IBOutlet属性的值复制到其他位置,因为在下次实例化nib时它将被覆盖.
例如,假设您已将timerViewFromNib属性连接到nib文件中的NSView:
@property (nonatomic, assign) IBOutlet NSView *timerViewFromNib;
@property (nonatomic, assign) NSView *timerView1;
@property (nonatomic, assign) NSView *timerView2;
Run Code Online (Sandbox Code Playgroud)
您可以添加获取并显示该视图的两个不同实例,如下所示:
NSNib *nib = [[NSNib alloc] initWithNibNamed:@"IndividualTimers" bundle:nil];
[nib instantiateNibWithOwner:self topLevelObjects:nil];
self.timerView1 = self.timerViewFromNib;
self.timerView1.frame = CGRectMake(...);
[self.view addSubview:self.timerView1];
[nib instantiateNibWithOwner:self topLevelObjects:nil];
self.timerView2 = self.timerViewFromNib;
self.timerView2.frame = CGRectMake(...);
[self.view addSubview:self.timerView2];
self.timerViewFromNib = nil;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1798 次 |
| 最近记录: |