如何在基于TableView的CustomView中显示图像

时间:2014-05-09 05:43:29

标签: objective-c macos cocoa nstableview

我是Cocoa/Objective-c的新手,所以请耐心等待。

我正在尝试创建一个简单的程序,在窗口左侧有一个TableView,在右边有一个CustomView。 TableView有3列:(NSString) name, (NSInteger) x, (NSInteger) y.每当添加新行时,x和y值在0到100之间随机生成。我有一个简单的Star类来保存这三个属性。 TableView似乎工作得很好。

在右侧,我有一个CustomView,我想在每个新行添加到该条目的x,y的tableview时加载图像。

我在"addStar"课程中创建了这个CustomView方法,该方法是NSView。然后,在我的TableViewController类中,我试图在添加新行的“add”方法中调用"addStar"方法。

当我启动该计划时,我可以向TableView添加项目,但CustomView中没有任何内容。我在哪里错了?

CustomView.m

#import "CustomView.h"

@implementation CustomView

- (id)initWithFrame:(NSRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
    }
    return self;
}

- (void)drawRect:(NSRect)dirtyRect
{
    NSBezierPath* path = [NSBezierPath bezierPathWithRect:self.bounds];

    [[NSColor whiteColor] setFill];
    [path fill];
}

- (void)addStar:(float)x and:(float)y
{
    NSRect rect = NSMakeRect(x, y, 35, 35);
    imageView = [[NSImageView alloc] initWithFrame:rect];
    [imageView setImageScaling:NSScaleNone];
    [imageView setImage:[NSImage imageNamed:@"star.png"]];
    [self addSubview:imageView];
}

@end

TableViewController.m

#import "TableViewController.h"
#import "CustomView.h"
#import "Star.h"

@implementation TableViewController


- (id)init
{
    self = [super init];
    if (self) {
        list = [[NSMutableArray alloc] init];
    }
    return self;
}

- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {
    return [list count];
}

- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
    Star *s = [list objectAtIndex:row];
    NSString *identifier = [tableColumn identifier];
    return [s valueForKey:identifier];
}

- (void)tableView:(NSTableView *)tableView setObjectValue:(id)object forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
    Star *s = [list objectAtIndex:row];
    NSString *identifier = [tableColumn identifier];
    [s setValue:object forKey:identifier];
}

// Add row to the tableview
- (IBAction)add:(id)sender {
    Star *star = [[Star alloc] init];
    [list addObject:star];
    [tableView reloadData];

 // add star to the custom view
    CustomView* cv = [[CustomView alloc] init];
    [cv addStar:(float)[star xCoordinate] and:(float)[star yCoordinate]];

    [star release];
}

- (IBAction)remove:(id)sender {
    NSInteger row = [tableView selectedRow];
    [tableView abortEditing];
    if (row != -1)
        [list removeObjectAtIndex:row];
    [tableView reloadData];
}

- (void)dealloc
{
    [list release];
    [super dealloc];
}

@end

1 个答案:

答案 0 :(得分:0)

在右侧,您有自定义视图,而且您正在创建一个新视图...

CustomView* cv = [[CustomView alloc] init];
[cv addStar:(float)[star xCoordinate] and:(float)[star yCoordinate]];

但是你没有在屏幕上添加这个cv对象。

写,

[self addSubview:cv];//add this below above code as you are creating new object each time.