使用方法[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时如何传递参数?

[NSBundle loadNibNamed:owner:] 如何在 Xcode 3.1 中工作?

目标 C:loadNibNamed 方法:它是如何工作的?

loadNibNamed(_:owner:options:) 崩溃