2013-08-25 3 views
2

У меня есть UITextField с текстом, выровненным по правому краю. Я хотел изменить цвет текста заполнителя, поэтому я использую метод rect (Прямой) drawPlaceholderInRect: (CGRect). Он отлично работает, но текст заполнителя теперь выровнен по левому краю (текст остается выровненным по правому краю). Думаю, я могу добавить код, чтобы переопределить его, но я не нашел его. Заранее спасибо !Выровнять по правому краю 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» является автомагически рисунок от левого края ладится.

Что нужно сделать, это отрегулировать «rect» на «drawInRect», чтобы иметь левый край, который позволяет правому краю нарисованного текста касаться правого края вашего UITextField rect.

Для этого я бы рекомендовал использовать этот метод: NSString's [self placeholder] sizeWithFont: constrainedToSize:] (предполагается, что [self placeholder] - это NSString), который даст вам истинную ширину строки. Затем вычтите ширину из правого края поля текстового поля, и у вас есть левый край, где вам нужно начать рисовать.

+0

Он отлично работает! Большое спасибо. – jcr

2

Вот фрагмент кода на основе решения Майкла. Вы должны создать подкласс текстового поля и добавить метод ниже. Ниже метод в основном изменяет x-положение и ширину границ владельца места.

- (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

Я усиливается @ сниппета Saikiran немного, это работает для меня:

- (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]; 
} 
Смежные вопросы