Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 带插座的自定义NSView_Macos_Cocoa_Nsview - Fatal编程技术网

Macos 带插座的自定义NSView

Macos 带插座的自定义NSView,macos,cocoa,nsview,Macos,Cocoa,Nsview,我是Mac应用程序的新手,正在编写一个简单的应用程序,该应用程序的不同部分有一个通用的布局。它基本上是一个在所有部分都有一个或两个按钮(标题不断变化)的图像 所以我想创建一个CustomNSView,在一个新的Nib文件中有一个图像井和两个圆形按钮,在一个单独的类文件(MyCustomView,它是NSView的子类)中,它将在initWithframe方法中加载这个Nib。因此,现在每当我拖放一个自定义视图并将其类设置为MyCustomView时,我会立即获得图像和两个按钮,而不需要任何额外的

我是Mac应用程序的新手,正在编写一个简单的应用程序,该应用程序的不同部分有一个通用的布局。它基本上是一个在所有部分都有一个或两个按钮(标题不断变化)的图像

所以我想创建一个
CustomNSView
,在一个新的Nib文件中有一个图像井和两个圆形按钮,在一个单独的类文件(MyCustomView,它是NSView的子类)中,它将在
initWithframe
方法中加载这个Nib。因此,现在每当我拖放一个自定义视图并将其类设置为
MyCustomView
时,我会立即获得图像和两个按钮,而不需要任何额外的代码。但是现在我如何在其他视图控制器中控制这些按钮(outlets/actionms)?每个地方都会使用相同的视图,因此我无法将nib中的文件所有者设置为视图控制器


这样做对吗?有没有办法创建一个自定义视图,将所有按钮操作委托给它所包含的视图控制器

您可以编写自定义委托。尽管使用它,您可以将消息从一个对象发送到另一个对象

,但我会这样做。我不会创建CustomnView,我会创建一个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;
我喜欢这样

-(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
事件链接到这两个方法(它们应显示在
文件的所有者
中)

然后,在要加载通用自定义视图的其他类中,像这样实例化通用视图控制器

#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
}

我看不出这是怎么回答这个问题的。但愿我能在这个问题上悬赏。我真的想知道这是否可能。