2012-04-25 2 views
1

У меня есть NSTableView, который показывает путь файлов в одном столбце. Когда пользователь изменяет размер таблицы, я хочу изменить имя пути (например, /Users/name/testfile.m), но я хочу, чтобы конец пути (например ... name/testfile.m) был видимым, а не start (например,/Users/test/te ...) пути, как это происходит по умолчанию. Я написал функцию, которая успешно делает то, что я хочу сделать, но tableview мерцает при перерисовке, когда пользователь масштабирует таблицу. Я думаю, что для этого должен быть лучший, более элегантный алгоритм, но я просмотрел документацию для NSString и по адресу Stackoverflow, и я не могу найти что-нибудь, что даст лучшее решение. Если у кого-то есть более элегантное решение этой проблемы, которое было бы весьма полезно. Благодаря! Cheers, ТрондУсечь строку

Моя текущая функция:

-(NSString *) truncateString:(NSString *) myString withFontSize:(int) myFontSize withMaxWidth:(NSInteger) maxWidth 
{ 
    // Get the width of the current string for a given font 
    NSFont *font = [NSFont systemFontOfSize:myFontSize]; 
    CGSize textSize = NSSizeToCGSize([myString sizeWithAttributes:[NSDictionary  dictionaryWithObject:font forKey: NSFontAttributeName]]); 
    NSInteger lenURL =(int)textSize.width; 

    // Prepare for new truncated string 
    NSString *myStringShort; 
    NSMutableString *truncatedString = [[myString mutableCopy] autorelease]; 

    // If the available width is smaller than the string, start truncating from first character 
    if (lenURL > maxWidth) 
    { 
     // Get range for first character in string 
     NSRange range = {0, 1}; 

     while ([truncatedString sizeWithAttributes:[NSDictionary dictionaryWithObject:font forKey: NSFontAttributeName]].width > MAX(TKstringPad,maxWidth)) 
     { 
      // Delete character at start of string 
      [truncatedString deleteCharactersInRange:range]; 
     }  
     myStringShort = [NSString stringWithFormat:@"...%@",truncatedString]; 
    } 
    else 
    { 
     myStringShort=myString; 
    } 
    return myStringShort; 
} 

ответ

5

Типичный подход был бы просто:

[tableViewCell setLineBreakMode:NSLineBreakByTruncatingHead]; 

Как отметил Dondragmer, это свойство также может быть установлен в редакторе NIB Xcode в.

+2

Вы также можете сделать это в Interface Builder, выбрав ячейку (не только столбец) и изменив режим разрыва строки. Тот же эффект, который применяется только в другом месте. – Dondragmer

+0

@Dondragmer +1 yup. добавлено. Благодарю. – justin

+0

@ Justin: Спасибо за ваш ответ. Я попытался следовать вашему предложению, но это не сработало. Может быть, потому, что у меня есть собственный NSCell, где я рисую текст в каждом столбце, переопределяя '- (void) drawWithFrame: (NSRect) cellFrame inView: (NSView *) controlView'? Я также попытался установить это в IB без изменений. Какие-либо предложения? Благодаря! –

 Смежные вопросы

  • Нет связанных вопросов^_^