在两个笔尖之间传递参数:建议?

时间:2011-05-19 02:22:56

标签: objective-c cocoa parameter-passing nib class-method

在我的主笔尖(nib1)中,我有一个按钮,使用下面的代码激活另一个笔尖(nib2)。

我当前将值传递给nib2并从nib2获取的方法是在nib1中创建类方法。但是我的这个练习项目的目标之一是我需要设计nib2,以便我能够在另一个后来的项目中重用nib2。这意味着nib2不应该对nib1的类有任何了解。因此,当我稍后重新使用nib2时,我不需要修改其代码(调用nib1'class方法。)

我正在考虑在nib2的类中创建类方法。但那么在nib2处于活动状态之前我怎么能调用该方法呢?

我的做法是对的吗?有什么意见吗?

NSWindowController *iQWController = [[NSWindowController alloc] initWithWindowNibName:@"iQueryWindow"];
[iQWController showWindow:sender];

1 个答案:

答案 0 :(得分:1)

对于这个例子,我假设你有类定义nib1.h / nib1.m / nib1.xib& nib2.h / nib2.m / nib2.xib

您应该在nib2中创建属性,以便将数据导入nib 2。

要将数据从nib 2返回到nib 1,你应该定义一个委托协议,让nib 1实现它并将其设置为nib 2的委托。

nib2.h看起来像:

@protocol Nib2Delegate;

@interface Nib2 : UIViewController {
    id <Nib2Delegate> delegate;
}

@property (nonatomic, assign) id <Nib2Delegate> delegate;

@end

@protocol Nib2Delegate 

- (void)myMethod;

@end
在Nib1.h中你会得到:

#import "Nib2.h"

@interface Nib1 : UITableViewController <Nib1Delegate> {

}

- (void)myMethod;

@end

在Nib1.m

Nib2 *nib2 = [[Nib2 alloc] initWithNibName:@"Nib2" bundle:nil];
nib2.delegate = self;

然后你将在Nib1.m中实现myMethod。当你想在Nib2.m中调用它时,它看起来像

[delegate myMethod];