Чтобы настроить кнопку со стрелкой в NSComboBox, вам нужно создать подкласс NSComboBoxCell и настроить поле со списком для использования этой ячейки. Если вы настроили свой контроль в IB, вы можете легко изменить класс своей ячейки там. Если вы программно создаете поле со списком, создайте подкласс NSComboBox, переопределите + (Class)cellClass
и верните свой пользовательский подкласс NSComboBoxCell из этого метода.
Теперь для рисования. В вашем подклассе NSComboBoxCell вам необходимо переопределить
- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
.
(я пытался переопределить - (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
, но рамка ячейки, которую он предоставляет, останавливается за исключением рисования фактической области кнопки, т. Е. Охватывает только область ввода текста.)
Ваш кастом - (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
должен выглядеть примерно так:
- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {
[super drawWithFrame:cellFrame inView:controlView];
// Constrain to the far right of the provided frame to draw the button
NSRect bounds = NSMakeRect(cellFrame.origin.x + cellFrame.size.width - cellFrame.size.height, cellFrame.origin.y, cellFrame.size.height, cellFrame.size.height);
// Draw your custom button inside the bounds rect
}