これについては以前に質問しましたが、質問自体とその中のすべての情報が少し混乱している可能性があります。さらに、取得したい結果はもう少し複雑です。そこで、今のところ理解したい部分だけを処理するために、新しいクリーンテストプロジェクトを開始しました。
だから私が欲しいのは、基本的にこれです:私はビューコンテナを持っています(NSViewを継承します)。内部に、単純なNSImageまたはNSImageViewだけでなく、テキストフィールドとNSImageViewを含むカスタムビュー(NSViewも継承)を配置したいと思います。私がそれを呼んだこの「画像ホルダー」は、別のnibファイルにあります(私はApple SAmpleアプリケーション、COCOAスライドの後に自分自身を導いているのでこのアプローチを使用しています)。私がこれまでに得た結果は何かですが、私が期待しているものではありません。私はInterfaceBuilderで何か間違ったことをしているに違いないと思っています(適切なものを接続していない)が、もっと専門知識のある人が私を教えてくれることを願っています。
以下に、これまでに持っているすべてのコードを入れてみます。
//ImagesContainer.h
#import <Cocoa/Cocoa.h>
@interface ImagesContainer : NSView {
}
@end
//ImagesContainer.m
#import "ImagesContainer.h"
#import "ImageHolderView.h"
#import "ImageHolderNode.h"
@class ImageHolderView;
@class ImageHolderNode;
@implementation ImagesContainer
- (id)initWithFrame:(NSRect)frame {
self = [super initWithFrame:frame];
if (self) {
// Initialization code here.
//create some subviews
for(int i=0;i<3;i++){
ImageHolderNode *node = [[ImageHolderNode alloc] init];
[self addSubview:[node rootView]];
}
}
NSRunAlertPanel(@"subviews", [NSString stringWithFormat:@"%d",[[self subviews] count]], @"OK", NULL, NULL);
return self;
}
- (void)drawRect:(NSRect)dirtyRect {
// Drawing code here.
[[NSColor blackColor] set];
NSRectFill(NSMakeRect(0,0,dirtyRect.size.width,dirtyRect.size.height));
int i=1;
for(NSView *subview in [self subviews]){
[subview setFrameOrigin:NSMakePoint(10*i, 10)];
i++;
}
}
@end
//ImageHolderView.h
#import <Cocoa/Cocoa.h>
@interface ImageHolderView : NSView {
IBOutlet NSImageView *imageView;
}
@end
//ImageHolderVIew.m
#import "ImageHolderView.h"
@implementation ImageHolderView
- (id)initWithFrame:(NSRect)frame {
self = [super initWithFrame:frame];
if (self) {
}
return self;
}
- (void)drawRect:(NSRect)dirtyRect {
// Drawing code here.
[[NSColor blueColor]set];
NSRectFill(NSMakeRect(10,10, 100, 100));
//[super drawRect:dirtyRect];
}
@end
//ImageHolderNode.h
#import <Cocoa/Cocoa.h>
@class ImageHolderView;
@interface ImageHolderNode : NSObject {
IBOutlet ImageHolderView *rootView;
IBOutlet NSImageView *imageView;
}
-(NSView *)rootView;
-(void)loadUIFromNib;
@end
//ImageHolderNode.m
#import "ImageHolderNode.h"
@implementation ImageHolderNode
-(void)loadUIFromNib {
[NSBundle loadNibNamed:@"ImageHolder" owner: self];
}
-(NSView *)rootView {
if( rootView == nil) {
NSRunAlertPanel(@"Loading nib", @"...", @"OK", NULL, NULL);
[ self loadUIFromNib];
}
return rootView;
}
@end
私のペン先ファイルは次のとおりです。
- MainMenu.xib
ImageHolder.xib
MainMenuは、新しいプロジェクトを開始したときに生成されるxibです。
- ImageHolderは次のようになります: 画像リンク
これまでのところ、xibImageHolderで接続について説明します。
ファイルの所有者-ImageHolderNodeのクラスがありますImageHolder.xibのメインビューには、ImageHolderViewクラスがあります
再開すると、ビューコンテナに3つの青い長方形が表示されますが、ImageHolder.xibからロードされたビューを表示させることはできません。
誰かがCocoaSlidesサンプルアプリケーションを見たい場合は、アップルの開発者ページにあります(残念ながら、複数のリンクを投稿することは許可されていません:))