Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 将NSProgressingIndicator添加到NstableView中的特殊行_Objective C_Cocoa - Fatal编程技术网

Objective c 将NSProgressingIndicator添加到NstableView中的特殊行

Objective c 将NSProgressingIndicator添加到NstableView中的特殊行,objective-c,cocoa,Objective C,Cocoa,我非常困惑,因为NstableView中的多个NSProgressingIndicator无法正常工作,addSubview方法总是将进度单元格添加到tableview中的最后一行,而不是确切地添加到最后一行 我想要的行索引,下面是一些简单的代码: NsTableView数据源有两个成员: @interface tableModel : NSObject { NSString *name; NsProgressIndicator *progressobj; } @property(retai

我非常困惑,因为NstableView中的多个NSProgressingIndicator无法正常工作,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和一个特殊行之间建立连接,多亏了问题出在
cellFrame

[progress setFrame: cellFrame];

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

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