Как Вы мешаете тексту переносить в использование NSTableView NSAttributedString

У меня есть NSTableView, который имеет 2 столбца, один для значка и другого для двух строк текста. Во втором столбце, столбце текста, у меня есть некоторый больший текст, который является для названия объекта. Затем у меня есть новая строка и некоторый уменьшенный текст, который описывает состояние объекта.

Когда имя становится столь большим, что оно не соответствует на одной строке, которую оно переносит (или когда Вы уменьшаете окно, вниз столь маленькое, что оно заставляет имена не соответствовать на одной строке).

row1 ===============
| отобразите |  некоторое имя   |
| отобразите |   неактивный               |
row2 ================
| отобразите |  , некоторое имя действительно долго называет   | <-это получает перенесенное продвижение, 'неактивное' из представления
| отобразите |   неактивный               |
===================

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

6
задан Justin 24 May 2010 в 22:28
поделиться

1 ответ

Прокрутка в Какао реализована с помощью NSScrollView , который представляет собой представление вместо ячейки , поэтому, если вы действительно хотите реализовать горизонтальную прокрутку для ячеек табличного представления Я думаю, вам придется создать подкласс всего NSTableView и реализовать там эту функцию. Я предлагаю (конечно, не зная специфики вашей ситуации) не делать этого, поскольку это нестандартное поведение и, вероятно, потребует довольно много работы.

Усечение вместо переноса

Если вы используете стандартный NSTextFieldCell , просто выберите «Усечение» для его значения макета в IB вместо «Обтекания».

Если у вас есть собственный NSCell , в котором вы делаете свой собственный рисунок (я предполагаю, что это именно тот случай), вы должны создать NSParagraphStyle , установить его режим разрыва строки добавьте его как значение для ключа NSParagraphStyleAttributeName в словарь текстовых атрибутов NSAttributedString .

Пример:

NSMutableParagraphStyle *paragraphStyle = [[[NSMutableParagraphStyle alloc] init] autorelease];
[paragraphStyle setLineBreakMode:NSLineBreakByTruncatingTail];
[attributedStr
 addAttribute:NSParagraphStyleAttributeName
 value:paragraphStyle
 range:NSMakeRange(0,[attributedStr length])];

Рамки расширения ячеек

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

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

Если они по какой-то причине не работают и вы используете собственный подкласс NSCell , убедитесь, что вы реализовали -drawWithExpansionFrame: inView: и -expansionFrameWithFrame: inView: в вашей ячейке. Также убедитесь, что вы не возвращаете NO в вашем NSTableViewDelegate для -tableView: shouldShowCellExpansionForTableColumn: row: (если он у вас есть).

Настроить ширину представления всей таблицы?

Если вы хотите изменить ширину определенного столбца (и, следовательно, всего представления таблицы, что может привести к появлению горизонтальной полосы прокрутки в представлении прокрутки) так, чтобы текст, содержащийся в его ячейках, никогда не будет усечен или обернут, вы, вероятно, можете сделать это в своем NSTableViewDelegate , например, вызвав -cellSize для каждой ячейки строки в этом столбце и изменив размер столбец до наибольшего значения (вы, конечно, захотите сделать это только при изменении значений).

11
ответ дан 9 December 2019 в 22:30
поделиться