2013-08-25 2 views
2

텍스트가 오른쪽 정렬 된 UITextField가 있습니다. 자리 표시 자 텍스트의 색을 변경하려고하므로 - (void) drawPlaceholderInRect : (CGRect) rect 메서드를 사용합니다. 그것은 훌륭하게 작동하지만 자리 표시 자 텍스트는 지금 왼쪽 정렬됩니다 (텍스트는 오른쪽 정렬 됨). 내가 그것을 무시하기 위해 몇 가지 코드를 추가 할 수 있다고 생각하지만 어느 것을 찾지 못했습니다. 미리 감사드립니다!PlaceHolder 텍스트를 UITextField에 오른쪽 정렬하십시오.

- (void)drawPlaceholderInRect:(CGRect)rect 
{ 
    [[UIColor redColor] setFill]; 
    UIFont *font = [UIFont fontWithName:@"HelveticaNeue-Medium" size:18]; 
    [[self placeholder] drawInRect:rect withFont:font]; 
} 

답변

0

당신은 "drawInRect"자동적으로 왼쪽 가장자리에서 받고있다 잘가는 것을 발견했습니다.

당신이해야 할 일은 "drawInRect"로 전달 된 "rect"을 왼쪽 가장자리로 조정하여 그려진 텍스트의 오른쪽 가장자리가 UITextField rect의 오른쪽 가장자리에 닿도록 허용하는 것입니다.

이렇게하려면이 방법을 사용하는 것이 좋습니다. NSString의 [self placeholder] sizeWithFont: constrainedToSize:] ([self placeholder]을 NSString으로 가정)은 문자열의 실제 너비를 제공합니다. 그런 다음 텍스트 필드 상자의 오른쪽 가장자리에서 너비를 뺀 다음 그리기를 시작할 필요가있는 왼쪽 가장자리가 있습니다.

+0

그것은 잘 작동합니다! 고마워. – jcr

2

다음은 Michael 솔루션을 기반으로 한 코드입니다. 텍스트 필드의 하위 클래스를 만들고 아래 메서드를 추가해야합니다. 아래의 방법은 기본적으로 자리 표시 자 경계의 x 위치와 너비를 변경합니다.

내가 Saikiran의 조각 약간 @ 강화
- (CGRect)placeholderRectForBounds:(CGRect)bounds{ 
    CGRect newbounds = bounds; 
    CGSize size = [[self placeholder] sizeWithAttributes: 
         @{NSFontAttributeName: self.font}]; 
    int width = bounds.size.width - size.width; 
    newbounds.origin.x = width ; 
    newbounds.size.width = size.width; 
    return newbounds; 
} 
0

이 나를 위해 작동합니다

- (CGRect)placeholderRectForBounds:(CGRect)bounds 
{ 
    return self.editing ? ({CGRect bounds_ = [super placeholderRectForBounds:bounds]; 
     bounds_.origin.x = bounds_.size.width 
           - ceilf(self.attributedPlaceholder.size.width) 
           + self.inset.x; 
     bounds_.origin.y = .5f * (.5f * bounds_.size.height 
            - ceilf(self.attributedPlaceholder.size.height)); 
     bounds_.size.width = ceilf(self.attributedPlaceholder.size.width); 
     bounds_.size.height = ceilf(self.attributedPlaceholder.size.height); 
     bounds_; 
    }) : [super placeholderRectForBounds:bounds]; 
} 
관련 문제