Посещение каждой строки NSTableview, чтобы изменить изображение на Click-
Я пытаюсь добавить класс 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;
}
Может ли кто-нибудь помочь мне в этом? Объект с индексом 0 в tickTracker не имеет зеленого цвета, когда проверяет объект с индексом 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];
}
}
Ouput:
NSLog(@" 123 number %@",[tickTracker objectAtIndex:i]);
Output: 123 number 2
NSLog(@" %li value ",row);
2 value
2 ответа
1) Объявить имущество selectedCars
типа NSMutableDictionary. Начни это. Это заменит ваш "тик-трекер".
2) Вам не нужен IBAction. Просто переопределить tableViewSelectionDidChange
:
- (void)tableViewSelectionDidChange:(NSNotification *)aNotification {
[selectedCars addObject:@"yes" forKey:[[self tableView] selectedRow];
}
3) В dataCellForTableColumn
замещать
}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){
с
}else{
if ([self.selectedCars objectForKey:row]) {
... set the tick image ...
} else {
... set the cross image ...
}
4) Если вы хотите отменить выбор строк, отметьте метод делегирования...DidChange, если selectedCars
уже установлен и удалите запись, если истина.
if([tickTracker containsObject:row]) {
}
Это решенный вопрос. Пока значение строки объекта находится внутри tickTracker, измените изображение.