То, что я пытаюсь сделатьПодсветка отредактированного NSBrowserCell и рисование фокусного кольца на его NSText?
Я пытаюсь добавить функциональность редактирования на месте NSBrowser комплект подключения в. Я бы хотел, чтобы это поведение было функционально и визуально похоже на реализацию 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];
}
Спасибо @mpergand своим кодом Я думаю, что смогу выполнить свою цель. –