2010-08-19 6 views
3

UIView에는 문자열을 표시하기 위해 두 개의 UILabels이 포함되어 있습니다. 첫 번째 UILabel은 고정 크기이며 문자열이 너무 길고이 문자열을 보유 할 수없는 경우 UILabel에 최대 문자를 표시하고 처음에는 UILabel으로 표시하고 나머지 문자열은 두 번째로 표시합니다. UILabel .UILabel에서 표시된 텍스트를 아는 방법?

그러나 이것을 확인하려면 먼저 UILabel에 표시된 문자열의 정확한 부분을 알아야합니다. 문자열의 임의성 및 줄 바꿈 때문에 쉽지 않습니다.

문자열의 일부가 잘리지 않고 첫 번째 UILabel에 표시된 텍스트 만 가져 오는 방법이 있습니까?

답변

1
if ([_infoMedia.description length] > 270) { 
     NSRange labelLimit = [_infoMedia.description rangeOfString:@" " options:NSCaseInsensitiveSearch range:NSMakeRange(270, (_infoMedia.description.length - 270))]; 
     _descTop.text = [_infoMedia.description substringToIndex:labelLimit.location]; 
     _descBottom.text = [_infoMedia.description substringFromIndex:(labelLimit.location+1)]; 
} else { 
      _descTop.text = _infoMedia.description; 
      _descBottom.text = @""; 
} 

그래, 늦은 답변이지만 어쩌면 누군가를 도울 수 있습니다. 위 코드는 대략 앱에서 사용한 솔루션입니다.

_descTop은 첫 번째 레이블이고 _descBottom은 두 번째 레이블입니다. 270은 첫 번째 레이블 _descTop에 표시된 평균 최대 문자 수보다 약간 작은 상수입니다. 나는 여러 가지 문자열로 시도하면서 손으로 계산했다. 아마도 더 나은 방법이있을 수 있지만 나쁘지는 않다.

표시 할 문자열 (_infoMedia.description)이 270자를 초과하는 경우, 다음 문자를 검색하여 첫 번째 270 자와 문자열의 다음 단어 끝을 구분합니다. 270 자 제한은 단어 중간에 문자열을 자릅니다. 그런 다음 첫 번째 레이블에 문자열의 첫 번째 부분을 넣고 두 번째 레이블에는 두 번째 부분을 넣습니다.

그렇지 않은 경우 문자열의 전역을 첫 번째 레이블에만 넣습니다.

나는 그게 진절머리 나는 해결책이라는 것을 알고 있습니다. 그러나 그것은 효과가 있었고, 그렇게하기위한 더 좋은 방법을 찾지 못했습니다.

+1

안녕, 난 당신이 뭘 하려는지 볼 수 있으며 응용 프로그램에서 또는 경우 기준에 경우에 작동 할 수 있지만 코드는 매우 유연하지 않고 계정에 사용되는 글꼴을해야 레이블 및 그것의 크기입니다. – Daniel

0

다음 코드는 원하는 것을 얻는데 도움이 될 수 있습니다 !!

//If you want the string displayed in any given rect, use the following code.. 
@implementation NSString (displayedString) 

//font- font of the text to be displayed 
//size - Size in which we are displaying the text 

-(NSString *) displayedString:(CGSize)size font:(UIFont *)font 
{ 
NSString *written = @""; 

int i = 0; 
int currentWidth = 0; 
NSString *nextSetOfString = @""; 

while (1) 
{ 
    NSRange range; 
    range.location = i; 
    range.length = 1; 

    NSString *nextChar = [self substringWithRange:range]; 
    nextSetOfString = [nextSetOfString stringByAppendingString:nextChar]; 

    CGSize requiredSize = [nextSetOfString sizeWithFont:font constrainedToSize:CGSizeMake(NSIntegerMax, NSIntegerMax)]; 
    currentWidth = requiredSize.width; 

    if(size.width >= currentWidth && size.height >= requiredSize.height) 
    { 
     written = [written stringByAppendingString:nextChar]; 
    } 
    else 
    { 
     break; 
    } 
    i++; 
} 


    return written; 
} 

@end 
관련 문제