到目前为止,我只在 iPhone 上编程过,所以 Cocoa 在某些方面对我来说有点令人困惑。这就是我遇到困难的地方。我希望我的窗口的背景是不可见的,并且没有标题栏。像这样的事情:
这是我的做法:
我将我的窗口
的类设置为自定义窗口,我是这样创建的:
自定义窗口.h
#import <Foundation/Foundation.h>
#import <Cocoa/Cocoa.h>
@interface CustomWindow : NSWindow {
@private
NSPoint initialLocation;
}
@property(assign)NSPoint initialLocation;
@end
自定义窗口.m
//trimmed to show important part
#import "CustomWindow.h"
@implementation CustomWindow
@synthesize initialLocation;
- (id)initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)aStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)flag {
// Removes the window title bar
self = [super initWithContentRect:contentRect styleMask:NSBorderlessWindowMask backing:NSBackingStoreBuffered defer:NO];
if (self != nil) {
[self setAlphaValue:1.0];
[self setOpaque:NO];
}
return self;
}
@end
现在,在该窗口的 .xib
文件中,我已在窗口上添加了一个自定义 View 。我已将 View 类设置为我创建的继承自 NSView
的自定义类。我的设置方法如下:
MainView.h
#import <Cocoa/Cocoa.h>
@interface MainView : NSView {
@private
//nothing to see here, add later
}
@end
MainView.m
//trimmed greatly again to show important part
#import "MainView.h"
@implementation MainView
- (id)initWithFrame:(NSRect)frame
{
self = [super initWithFrame:frame];
if (self) {
}
return self;
}
- (void)drawRect:(NSRect)rect {
// Clear the drawing rect.
[[NSColor clearColor] set];
NSRectFill([self frame]);
}
@end
这是我的问题。我已将 NSImageView
添加到 Interface Builder 中的自定义 View (MainView
)。但是,由于某种原因,我无法弄清楚如何将此 ImageView 连接到自定义 View 中的实例变量。它们似乎无法像我在创建 iPhone 应用程序时通常那样进行连接。有什么想法如何做到这一点吗?
最佳答案
您可以像连接 iOS 程序一样连接在 Mac OS X 中的 XIB 中创建的对象。只需将 NSImageView 属性添加到主视图中,将其标记为 IBOutlet 并将其连接起来即可。
例如,
在 MainView.h 中为您的 NSImageView 创建一个属性并使其成为 IBOutlet:
#import <Cocoa/Cocoa.h>
@interface MainView : NSView {
NSImageView *imageView;
}
@property(retain) IBOutlet NSImageView *imageView;
@end
在界面生成器中,确保自定义 View 的类设置为 MainView,为此,请单击自定义 View XIB 中的文件所有者对象,然后在检查器中选择标识选项并输入 MainView 作为类类型.
接下来,按住 CTRL 键并单击文件的所有者,然后将箭头拖动到 NSImageView 并选择 imageView 导出。
这就是全部内容了。您现在应该能够从代码中引用 ImageView 。
关于objective-c - 使用IB连接NSImageView查看?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5087248/