将NsProgressIndicator添加到NstableView中的特殊行

时间:2011-06-23 13:05:56

标签: objective-c cocoa

我很困惑,因为NstableView中的多个NsProgressIndicators无法正常工作,addSubview方法总是将进度单元格添加到tableview的最后一行,而不是 我想要的行索引,这里有一些简单的代码:

NsTableView数据源有两个成员:

@interface tableModel : NSObject {

NSString *name;
NsProgressIndicator *progressobj;
}

@property(retain) NSString* name;
@property(retain) NsProgressIndicator *progressobj;

我写了一个自定义的单元类:“ProgressCell”,

Progresscell.m:

- copyWithZone : (NSZone *)zone
{
ProgressCell *cell = (ProgressCell *)[ super copyWithZone:zone ];
cell->progress = [ progress retain ];
return cell;
}

- (void) drawInteriorWithFrame : (NSRect) cellFrame 
                     inView: (NSView *) controlView
{
[super drawInteriorWithFrame:cellFrame inView:controlView];

if(progress==nil)
{
    return;
}       
if(![progress superview])
{
    [controlView addSubview: progress];

}       
    [progress setFrame: cellFrame];
    [progress sizeToFit];   
}

- (void)setProgress:(NsProgressIndicator *)newProgress
{
[newProgress retain];
[progress release];
progress = newProgress; 
[progress sizeToFit];
}

现在是时候将一些tableModel对象添加到表视图数据源:

NSString *str=@"test";
tableModel *tablemodel=[[tableModel alloc] initWithPriority:[str retain] andProgress:nil];
[tableArrays addObject:tablemodel];
[tableView reloadData];

进度成员为零,因为我不想在开始时显示progressindicator, 猜猜我有一个编辑按钮,设置如下操作:

NsProgressIndicator * progress = [[[NsProgressIndicator alloc] init] autorelease];
[progress setIndeterminate: NO];
[progress setMinValue:0];
[progress setMaxValue:100];
tableModel * zMyDataObj= [[self tableArrays] objectAtIndex:[tableView selectedRow]];
zMyDataObj.progressobj=[progress retain];
[tableView reloadData];

willDisplayCell委托方法是:

tableModel * zMyDataObj= [[self tableArrays] objectAtIndex:pRow];
if([zMyDataObj progressobj]!=nil)
{
[cell setProgress:[zMyDataObj progressobj]];
}

但是当我点击编辑按钮时,新的NsProgressindicator总是被添加到最后一行,而不是所选行,addSubView方法肯定不适合这种情况,所以我想寻求一个最佳的解决方案来设置一个NsProgressIndicator和特殊行之间的连接,谢谢

1 个答案:

答案 0 :(得分:2)

cellFrame是问题所在:

[progress setFrame: cellFrame];

cellFrame指的是tableView中单元格的位置,它具有特定的origin(x,y)。如果您想要定位进度指示器,您应该为它创建一个新的矩形并在cellRect内设置原点。

NSMakeRect((cellFrame.size.width - 20.f)/2, cellFrame.size.height - 20.f), 20.f, 20.f)