我是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
答案 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.