Многоточие в края на UITextView

Ако имам многоредов UITextView без възможност за превъртане, чийто текст е по-дълъг, отколкото може да се побере във видимата област, тогава текстът просто се прекъсва така:

Congress shall make no law respecting 
an establishment of religion, or 

Как мога да накарам текста да се показва с многоточие, където е границата на текста, така

Congress shall make no law respecting
an establishment of religion, or … 

Други контроли като етикети и бутони имат тази възможност.


person cannyboy    schedule 17.08.2011    source източник


Отговори (3)


Защо не използвате UILabel настройка numberOfLines за нещо подходящо и не получите тази функционалност безплатно?

person Paul.s    schedule 17.08.2011
comment
Вероятно защото: Ако имате нужда от определена област от пространството, запълнена с многоточия текст, това работи само с UILabel, ако можете да изчислите точния брой редове, които ще бъдат използвани, което е трудно да се направи с различни размери на екрана. Твърде малко редове и ще имате празно място в края, твърде много и елипсите изобщо няма да се показват, защото ще бъдат извън екрана. - person Albert Renshaw; 10.12.2015

UITextView е проектиран да превърта, когато низът е по-голям от това, което изгледът може да покаже. Уверете се, че сте задали правилно атрибутите за закрепване и автоматично преоразмеряване в кода или вашия xib.

Ето пример от публикация в блог за това как да внедрите свое собствено многоточие.

@interface NSString (TruncateToWidth)
- (NSString*)stringByTruncatingToWidth:(CGFloat)width withFont:(UIFont *)font;
@end

#import "NSString+TruncateToWidth.h"

#define ellipsis @"…"

@implementation NSString (TruncateToWidth)

- (NSString*)stringByTruncatingToWidth:(CGFloat)width withFont:(UIFont *)font
{
  // Create copy that will be the returned result
  NSMutableString *truncatedString = [[self mutableCopy] autorelease];
  // Make sure string is longer than requested width
  if ([self sizeWithFont:font].width > width)
  {
    // Accommodate for ellipsis we'll tack on the end
    width -= [ellipsis sizeWithFont:font].width;
    // Get range for last character in string
    NSRange range = {truncatedString.length - 1, 1};

    // Loop, deleting characters until string fits within width
    while ([truncatedString sizeWithFont:font].width > width) 
    {
      // Delete character at end
      [truncatedString deleteCharactersInRange:range];
      // Move back another character
      range.location--;
    }

    // Append ellipsis
    [truncatedString replaceCharactersInRange:range withString:ellipsis];
  }

  return truncatedString;
}

@end
person Joe    schedule 17.08.2011
comment
Бих препоръчал UILabel, но ако имате нужда от редактиране, вижте тази публикация iphonedevelopertips.com/cocoa/ - person Joe; 18.08.2011
comment
С UITextView не забравяйте да вземете под внимание границите от 8px, които контролата добавя около текста. Това може да създаде проблеми при определяне на ширините. - person reddersky; 04.12.2011

Някой току-що ми показа, че всъщност е много лесно да се направи това с UITextView на iOS 7 и по-нова версия:

UITextView *textView = [UITextView new];
textView.textContainer.lineBreakMode = NSLineBreakByTruncatingTail;
person jasongregori    schedule 15.04.2016