1

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

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

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

4

2 回答 2

0

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

于 2013-11-04T09:09:46.837 回答
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
}
于 2013-11-07T11:26:01.000 回答