我很困惑,因为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和特殊行之间的连接,谢谢
答案 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)