この例の ImageAndTextCell.h クラスをプロジェクトに追加しようとしています。無事追加できました。以下のような感じです
行をクリックすると、選択したインデックスが取得され、IBAction で緑色に変更する必要があります。これもうまくいきます。しかし、別の行をクリックすると、前の行の緑が赤に変わります。行をチェックするロジックに問題があると確信しています。失敗した以下のコードを実装しました
- (NSCell *)tableView:(NSTableView *)tv dataCellForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
NSTextFieldCell *cell = [tableColumn dataCell];
if(tv== [self tableView]){
if([[tableColumn identifier] isEqualToString:COLUMN_TITLE]){
if(![tickTracker count]){
ImageAndTextCell *imageAndTextCell = (ImageAndTextCell *)cell;
// Set the image here since the value returned from outlineView:objectValueForTableColumn:... didn't specify the image part...
NSString *fileName = [[NSBundle mainBundle] pathForResource:@"Cross" ofType:@"png"];
NSImage *markerImage = [[NSImage alloc] initWithContentsOfFile:fileName];
[imageAndTextCell setImage:markerImage];
}else{
for (int i= 0;i < [tickTracker count];i++){
NSLog(@" 123 number %@",[tickTracker objectAtIndex:i]);
NSInteger myInteger = [[tickTracker objectAtIndex:i] integerValue];
[changedRows addObject:[tickTracker objectAtIndex:i]];
if(row == myInteger){
NSLog(@" %li value ",row);
ImageAndTextCell *imageAndTextCell = (ImageAndTextCell *)cell;
// Set the image here since the value returned from outlineView:objectValueForTableColumn:... didn't specify the image part...
NSString *fileName = [[NSBundle mainBundle] pathForResource:@"Tick" ofType:@"png"];
NSImage *markerImage = [[NSImage alloc] initWithContentsOfFile:fileName];
[imageAndTextCell setImage:markerImage];
}else{
ImageAndTextCell *imageAndTextCell = (ImageAndTextCell *)cell;
// Set the image here since the value returned from outlineView:objectValueForTableColumn:... didn't specify the image part...
NSString *fileName = [[NSBundle mainBundle] pathForResource:@"Cross" ofType:@"png"];
NSImage *markerImage = [[NSImage alloc] initWithContentsOfFile:fileName];
[imageAndTextCell setImage:markerImage];
}
}
}
return cell;
}
誰かがこれについて私を助けることができますか? tickTracker のインデックス 0 のオブジェクトは、インデックス 1 のオブジェクトをチェックするときに緑に設定されません。
編集1。ティックトラッカーの内部:
-(IBAction)メソッド:(id)送信者{
NSUInteger idx = [[tableView selectedRowIndexes] firstIndex];
while (idx != NSNotFound) {
int rowKey = (int)idx;
NSNumber* rowNumber = [NSNumber numberWithInt:rowKey];
[tickTracker addObject:rowNumber];
idx =[[tableView selectedRowIndexes] indexGreaterThanIndex:idx];
}
}
出力:
NSLog(@" 123 number %@",[tickTracker objectAtIndex:i]);
Output: 123 number 2
NSLog(@" %li value ",row);
2 value