Повреждение строк усечением
В версии 10.3 OS X и позже, объекты стиля абзаца (NSParagraphStyle и NSMutableParagraphStyle) имеют поддержку строки, повреждающейся усечением. В дополнение к ранее доступным повреждающим строку режимам перехода на новую строку, символьного обертывания и отсечения, стили абзаца могут вместить строку в контейнер макетов путем усечения строки в ее голове, хвосте, или середина. Недостающий текст обозначен глифом замещающего знака (…). Эта возможность является очень полезными внутренними ячейками таблицы, где пространство, вероятно, будет ограничено, и пользователи могут легко изменить размеры ширины столбцов.
Метод, который Вы используете для конфигурирования табличного представления для повреждения строк усечением, прост, но не полностью очевиден. Во-первых, Вы конфигурируете ячейки столбца таблицы с сообщением [cell setWraps:YES]
. Затем поскольку объектное значение возвратило по условию источник, используйте приписанную строку, сконфигурированную с желаемым стилем абзаца.
Рисунок 1 показывает отображению табличного представления два столбца строк, сконфигурированных с режимом повреждения строки стиля абзаца NSLineBreakByTruncatingMiddle
как показано в Перечислении 1.
Следующий пример имеет объект контроллера с названным выходом _tableView
представление табличного представления. Объект контроллера является источником данных таблицы. Перечисление 1 показывает всю реализацию контроллера.
Реализация Контроллера перечисления 1, определяющая табличное представление с помощью строкового усечения
@implementation Controller |
- (void)awakeFromNib { |
NSArray *columns = [_tableView tableColumns]; |
int index, count = [columns count]; |
for (index = 0; index < count; index++) { |
NSTableColumn *column = [columns objectAtIndex:index]; |
[[column dataCell] setWraps:YES]; |
} |
} |
- (int)numberOfRowsInTableView:(NSTableView *)tableView { |
return 20; |
} |
- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(int)row { |
static NSDictionary *info = nil; |
if (nil == info) { |
NSMutableParagraphStyle *style = [[NSParagraphStyle defaultParagraphStyle] mutableCopy]; |
[style setLineBreakMode:NSLineBreakByTruncatingMiddle]; |
info = [[NSDictionary alloc] initWithObjectsAndKeys:style, NSParagraphStyleAttributeName, nil]; |
[style release]; |
} |
return [[[NSAttributedString alloc] initWithString:[NSString stringWithFormat:@"Row #%d with really, really, really, really long string", row + 1] attributes:info] autorelease]; |
} |
@end |
awakeFromNib
реализация конфигурирует ячейку данных для каждого столбца в табличном представлении (число столбцов в таблице устанавливается в Интерфейсном Разработчике). Ключевое сообщение [[column dataCell] setWraps:YES]
. Это сообщение говорит таблице использовать повреждающий строку режим приписанной строки, которая является объектным значением ячейки. Если значение, переданное с этим вызовом, было NO
, содержание ячеек было бы просто отсечено.
tableView:objectValueForTableColumn:row:
метод устанавливает объект стиля абзаца с режимом разрыва строки NSLineBreakByTruncatingMiddle
. Метод тогда помещает стиль абзаца в словарь атрибутов. Последняя строка возвращает приписанную строку, с этим словарем, как объектное значение для каждой ячейки в таблице.