Ответы пользователя по тегу Cocoa
  • Как добавить кнопку NSButton в NSTokenField?

    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
    Ответ написан
    Комментировать
  • Как правильно закрывать NSOpenPanel?

    absterno
    @absterno Автор вопроса
    Облазив множество ресурсов и изучив приличное количество приложений с открытым кодом выяснил, что мое первое решение с [panel close]; вполне имеет право на жизнь так как встречал его во многих открытых программах. Также нашел еще несколько решений, а именно вызов метода performSelector:withObject:afterDelay: который запускает преданный ему метод селектор сразу после завершения метода beginSheetModalForWindow:completionHandler или вызов метода beginSheet:completionHandler который сам закрывает предшествующий ему sheet, а затем открывает свой.

    Какой метод для закрытия всплывающих окон лучше сказать не могу - скорее это дело вкуса.
    Ответ написан
    Комментировать