Что я пытаюсь сделать
Я пытаюсь добавить функцию редактирования на месте в NSBrowser из Connection Kit. Я бы хотел, чтобы это поведение было функционально и визуально похоже на реализацию Finder.
Визуальный эффект, к которому я стремлюсь
Что у меня есть
Стрелки указывают на кольцо фокусировки и подсветку ячеек в реализации Finder и на отсутствие этого в моей.
Я пытался
- Установка цвета фона ячейки в контроллере, в его методе
drawInteriorWithFrame
- То же самое для редактора полей
setFocusRingType:NSFocusRingTypeDefault
для редактора полей и ячеек как в контроллере, так и в методе рисования- Ручное рисование цвета выделения в методе рисования
- Различные комбинации вышеперечисленного, и, несомненно, некоторые из них я забыл.
Лучшее, что мне удалось, это получить область, окружающую изображение ячейки, окрашенную в цвет выделения.
Есть ли что-то фундаментальное, что мне здесь не хватает? Может ли кто-нибудь предложить отправную точку для подхода к этому? drawInteriorWithFrame
место для этого?
У меня редактирование работает нормально - у меня просто проблемы с визуальными аспектами.
Код для разрешения редактирования:
// In the main controller
int selectedColumn = [browser selectedColumn];
int selectedRow = [browser selectedRowInColumn:selectedColumn];
NSMatrix *theMatrix = [browser matrixInColumn:selectedColumn];
NSRect cellFrame = [theMatrix cellFrameAtRow:selectedRow column:0];
NSText *fieldEditor = [[browser window] fieldEditor:YES
forObject:editingCell];
[cell editWithFrame:cellFrame
inView:theMatrix
editor:fieldEditor
delegate:self
event:nil];
И в моем подклассе NSBrowserCell:
- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {
image = [[self representedObject] iconWithSize:[self imageSize]];
[self setImage:image];
NSRect imageFrame, highlightRect, textFrame;
// Divide the cell into 2 parts, the image part (on the left) and the text part.
NSDivideRect(cellFrame, &imageFrame, &textFrame, ICON_INSET_HORIZ + ICON_TEXT_SPACING + [self imageSize].width, NSMinXEdge);
imageFrame.origin.x += ICON_INSET_HORIZ;
imageFrame.size = [self imageSize];
[super drawInteriorWithFrame:cellFrame inView:controlView];
}
- (void)editWithFrame:(NSRect)aRect inView:(NSView *)controlView editor:(NSText *)textObj delegate:(id)anObject event:(NSEvent *)theEvent {
NSRect imageRect, textRect;
NSDivideRect(aRect , &imageRect, &textRect, 20, NSMinXEdge);
self.editing = YES;
[super editWithFrame: textRect inView: controlView editor:textObj delegate:anObject event:theEvent];
}