Повреждение строк усечением

В версии 10.3 OS X и позже, объекты стиля абзаца (NSParagraphStyle и NSMutableParagraphStyle) имеют поддержку строки, повреждающейся усечением. В дополнение к ранее доступным повреждающим строку режимам перехода на новую строку, символьного обертывания и отсечения, стили абзаца могут вместить строку в контейнер макетов путем усечения строки в ее голове, хвосте, или середина. Недостающий текст обозначен глифом замещающего знака (…). Эта возможность является очень полезными внутренними ячейками таблицы, где пространство, вероятно, будет ограничено, и пользователи могут легко изменить размеры ширины столбцов.

Метод, который Вы используете для конфигурирования табличного представления для повреждения строк усечением, прост, но не полностью очевиден. Во-первых, Вы конфигурируете ячейки столбца таблицы с сообщением [cell setWraps:YES]. Затем поскольку объектное значение возвратило по условию источник, используйте приписанную строку, сконфигурированную с желаемым стилем абзаца.

Рисунок 1 показывает отображению табличного представления два столбца строк, сконфигурированных с режимом повреждения строки стиля абзаца NSLineBreakByTruncatingMiddle как показано в Перечислении 1.

Рисунок 1  Усеченные строки выведен на экран в ячейках таблицы
Truncated strings displayed in table cells

Следующий пример имеет объект контроллера с названным выходом _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. Метод тогда помещает стиль абзаца в словарь атрибутов. Последняя строка возвращает приписанную строку, с этим словарем, как объектное значение для каждой ячейки в таблице.