У меня есть 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;
}
Вы также можете сделать это в Interface Builder, выбрав ячейку (не только столбец) и изменив режим разрыва строки. Тот же эффект, который применяется только в другом месте. – Dondragmer
@Dondragmer +1 yup. добавлено. Благодарю. – justin
@ Justin: Спасибо за ваш ответ. Я попытался следовать вашему предложению, но это не сработало. Может быть, потому, что у меня есть собственный NSCell, где я рисую текст в каждом столбце, переопределяя '- (void) drawWithFrame: (NSRect) cellFrame inView: (NSView *) controlView'? Я также попытался установить это в IB без изменений. Какие-либо предложения? Благодаря! –