2011-06-23 73 views
0

我非常困惑,因爲NstableView中的多NsProgressIndicators無法正常工作,addSubview方法總是將進度單元添加到tableview中的最後一行,而不是完全爲 行索引我想,這裏有一些簡單的代碼:添加NsProgressIndicator到NstableView中的特殊行

的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 *[email protected]"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方法絕對不適合這種情況,所以我想尋求一個最佳的解決方案來設置多虧了

回答

2

cellFrame一個NsProgressIndicator和特殊行之間的連接,是這個問題:

[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)