使用方法[NSBundle loadNibNamed:xibName owner:[NSApplication sharedApplication]]加载Nib时如何传递参数?
Posted
技术标签:
【中文标题】使用方法[NSBundle loadNibNamed:xibName owner:[NSApplication sharedApplication]]加载Nib时如何传递参数?【英文标题】:How to pass parameter when loadNib with method [NSBundle loadNibNamed:xibName owner:[NSApplication sharedApplication]]? 【发布时间】:2012-07-17 03:46:20 【问题描述】:当我使用loadNibNamed
方法加载xib
文件时,如何传递一些参数?
[NSBundle loadNibNamed:xibName owner:[NSApplication sharedApplication]];
【问题讨论】:
将参数传递给什么?通常,在 XIB 中标识为文件所有者的对象类包含允许您基于也在 XIB 中的其他对象设置属性的插座。任何不由直接连接处理的设置都可以在awakeFromNib
方法中手动编码(或在加载完成后调用的其他方法,例如 windowDidLoad
用于窗口控制器)。所以:让 XIB 实例化你的类,然后使用 awakeFromNib
自定义实例。
将参数传递给 awakeFromNib 方法。
【参考方案1】:
为了在实例化你的类时传递参数,添加一个包装器到
loadNibNamed:owner:
方法并将你的参数传递给这个包装器。
这里是sn-p的代码:
(ClassName *) GetInstanceWithParameter1:(ParameterType *)param1 andParameter2:(ParameterType *)param2 ClassName *instance = [[ClassName alloc] initWithNibNamed:nibName bundle:nibBundle]; instance -> P1 = param1; instance -> P2 = param2; return instance;
这里 P1 和 P2 是您的类级别变量,对应于 param1 和 param2。现在您可以在代码中的任何位置使用它们。
【讨论】:
【参考方案2】:这是我所做的对我有用的事情的一个例子。
假设您有一个 Xib (Nib) 文件 (MyNibView.xib),它是一个 UIView。
那个 UIView 有一个与之链接的 Class,叫做 NibView,它有一个 header 和一个主文件; NibView.h 和 NibView.h。
如果您不知道如何将课程链接到 Nib:
点击你的 Nib > 去 Identity Inspector > 在下面输入你的类 自定义类 > 类。
1) 在 NibView.h 中确保您已实例化对象(您想要通过的对象)。对于这个例子,我将使用一个名为 name 的 NSString。
@property NSString *name;
2) 在 NibView.m 中创建一个函数(例如 helloWorld),然后在该函数中对传入的对象执行任何您想要执行的操作。
- (void) helloWorld
NSLog(@"hello %@",self.name);
3) 写那个方法也是 NibView.h
@property NSString *name;
- (void) helloWorld;
4) 在您从中传递数据的类(例如可能是 ViewController)中,导入您的视图类
#import "NibView.h"
并写下这段代码:
NSArray *nib =[[NSBundle mainBundle]loadNibNamed:@"MyNibView" owner:self options:nil];
// At this point - (void)awakeFromNib is called
NibView *view = [nib objectAtIndex:0];
view.name = @"Bob";
// Now lets call the method "helloWorld"
[view helloWorld];
// This line sets the MyNibView as the UIView of a ViewController (only relevant for this example).
self.view = view;
希望这可以帮助像它帮助我的其他人
【讨论】:
以上是关于使用方法[NSBundle loadNibNamed:xibName owner:[NSApplication sharedApplication]]加载Nib时如何传递参数?的主要内容,如果未能解决你的问题,请参考以下文章
是啥导致 [[NSBundle mainBundle] loadNibNamed 中的 BUS_ADRALN?
使用 [NSBundle loadNibNamed:owner:] 加载 NIB,但窗口未出现在前台
使用方法[NSBundle loadNibNamed:xibName owner:[NSApplication sharedApplication]]加载Nib时如何传递参数?