是Mac应用程序的新用户,我正在编写一个简单的应用程序,该应用程序具有应用程序不同部分的通用布局。它基本上是一个图像,在所有部分都有一个或两个按钮(标题保持不变)。
所以我考虑在一个新的Nib文件和一个单独的类文件(MyCustomView,它是NSView的一个子类)中创建一个CustomNSView
一个Image Well和两个圆形按钮,它会在{}中加载这个Nib {1}}方法。所以现在,当我拖动自定义视图并将其类设置为initWithframe
时,我立即获得了图像和两个按钮而没有任何其他代码。但是现在我如何控制其他View Controllers中的这些按钮(outlet / actionms)?每个地方都会使用相同的视图,因此我无法将nib中的文件所有者设置为视图控制器?
这样做是对的吗?是否有任何方法可以创建一个自定义视图,该视图将委托所有按钮操作分配给它所包含的控制器?
答案 0 :(得分:0)
您可以编写自定义代理。虽然使用它,但您可以将消息从一个对象发送到另一个对象
答案 1 :(得分:0)
这是我将如何做到的。我不会创建一个CustomNSView,我会创建一个CustomViewController(包含其xib文件)。在那个CustomViewController上,我会设计两个按钮并像这样设置CustomViewController.h。
@property (nonatomic, weak) id delegate; // Create a delegate to send call back actions
-(IBAction)buttonOneFromCustomVCClicked:(id)sender;
-(IBAction)buttonTwoFromCustomVCClicked:(id)sender;
CustomViewController.m就像这样。
-(void)buttonOneFromCustomVCClicked:(id)sender {
if ([self.delegate respondsToSelector:@selector(buttonOneFromCustomVCClicked:)]) {
[self.delegate buttonOneFromCustomVCClicked:sender];
}
}
-(void)buttonTwoFromCustomVCClicked:(id)sender {
if ([self.delegate respondsToSelector:@selector(buttonTwoFromCustomVCClicked:)]) {
[self.delegate buttonTwoFromCustomVCClicked:sender];
}
}
在customViewController的界面构建器中,将两个按钮的SentAction
事件链接到两个方法(它们应显示在file's owner
中)。
然后在你想要加载通用自定义视图的otherClass中,像这样实例化通用视图控制器。
#import "customViewController.h"
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
customViewController *newCustomViewController = [[ViewController alloc] initWithNibName:@"customViewController" bundle:nil];
[newCustomViewController setDelegate:self];
self.backGroundView = [newCustomViewController view]; // Assuming **backGroundView** is an image view on your background that will display the newly instantiated view
}
-(void)buttonOneFromCustomVCClicked:(id)sender {
// Code for when button one is clicked
}
-(void)buttonTwoFromCustomVCClicked:(id)sender {
// Code for when button two is clicked
}