absterno
@absterno

Как добавить кнопку NSButton в NSTokenField?

Я хочу в своем приложении в поле NSTokenField добавить кнопку, например что-то вроде этого:
1f81ff0b70154ef48e62fe2d9be1c31a.png
Т.е в NSTokenField есть кнопка плюсик которая должна выполнять какое-то действие, например всплывающее меню с выбором token'ов которые можно добавить в поле NSTokenField.

Я создал кнопку программно и добавил её в NSTokenField:
NSButton *button = [[NSButton alloc] initWithFrame:NSMakeRect(185, -1, 19, 24)];
[button setTitle:@"<"];
[button setFont:[NSFont menuFontOfSize:[NSFont smallSystemFontSize]]];
[button setButtonType:NSMomentaryPushInButton];
[button setBezelStyle:NSSmallSquareBezelStyle];
[button setTarget:self];
[button setAction:@selector(action:)];
[formatTokenField addSubview:button];

кнопка добавилась нормально:
c5f1b2d0a1c34d2d9ea18c713363fe46.png
но когда я пытаюсь ввести символы в NSTokenField область ввода перекрывает мою кнопку:
2a86e645866d43adbc92ea641f3486f8.png
Помогите пожалуйсто разобраться как правильно надо добавлять кнопки в NSTokenField и что нужно сделать чтобы область ввода не перекрывала добавленные кнопки (не могли бы вы привести примеры кода). Всем заранее спасибо.
  • Вопрос задан
  • 165 просмотров
Решения вопроса 1
absterno
@absterno Автор вопроса
Спасибо Petrushka за подсказку.
Код решения был найден на другом форуме.

Нужно унаследоваться от NSTokenFieldCell и переопределить функцию drawingRectForBounds:

#import <Cocoa/Cocoa.h>
@interface ExtCell : NSTokenFieldCell
@end

@implementation ExtCell

- (NSRect) drawingRectForBounds:(NSRect)rect {
    CGFloat vIndent = 2; //отступ сверху
    CGFloat hIndent = 2; // отступ сбоку
    CGFloat tfWidth = 185; //ширина поля ввода (ширина TokenField за вычетом отступов, ширины кнопки и прочего по усмотрению)
    CGFloat tfHeight = 20; //высота поля ввода (высота TokenField за вычетом отступов и прочего по усмотрению)
    NSRect newRect = CGRectMake(hIndent, vIndent, tfWidth, tfHeight);
    return newRect;
}

@end

9a85527ea00349d08be33c88b0924598.png

Значения vIndent и другие поменяйте на нормальные для своего случая.

Результат:
0f1b8b61fe1a43fb98c8fae6d88a8c8e.png11773233bc9647338d05acbe7c9894de.png
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
petruska
@petruska
IOS Developer
Может будет проще написать свой класс?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы