Как изменить метод усечения или ширину во всплывающем окне NSComboBox

Усечение можно легко установить для основной текстовой области, но всплывающее окно не выполняет никакого усечения, с похожими путями пользователи не могут определить, какой путь есть какой.

или это способ изменить ширину всплывающего списка, чтобы он соответствовал самой длинной строке, чтобы усечение не требовалось?


person Jared Zimmerman    schedule 20.01.2011    source источник


Ответы (1)


Официального способа сделать это, к сожалению, нет.

Есть способ сделать это, который, хотя и не использует никаких закрытых методов, опирается на внутреннюю реализацию NSComboBoxes, и это может измениться в любое время. Это, вероятно, было бы неприемлемо в App Store.

Если вы подклассируете NSComboBoxCell и реализуете метод NSTableViewDelegate tableView:willDisplayCell:forTableColumn:row:, вы можете изменить текстовую ячейку перед ее отображением во всплывающем окне поля со списком.

- (void)tableView:(NSTableView *)tableView
        willDisplayCell:(NSCell *)cell
        forTableColumn:(NSTableColumn *)tableColumn
        row:(NSInteger)rowIndex
{
   [cell setTruncatesLastVisibleLine:YES];
   [cell setLineBreakMode:NSLineBreakByTruncatingMiddle];
}

Это работает, потому что всплывающий список реализован внутри с помощью NSTableView, а делегат табличного представления установлен на всплывающую ячейку.

person Todd Yandell    schedule 21.01.2011
comment
Все еще работает на Биг Суре, спасибо ????. - person Niels Mouthaan; 28.01.2021