Как изменить цвет первой буквы текста текстовых полей - PullRequest
2 голосов
/ 18 ноября 2009

У меня есть текстовое поле, и начальная буква текста текстового поля всегда является знаком доллара. Теперь мне нужно изменить цвет символа доллара, чтобы символ доллара и оставшийся текст были разного цвета. Как я могу это сделать?? Любая идея

Ответы [ 2 ]

3 голосов
/ 18 ноября 2009

Нельзя сделать стандартным. В UITextField допускается только один стиль.

Лучшая идея: избавиться от $ в UITextField, заменить его пробелом, а затем поместить UILabel сверху.

2-я лучшая идея: подкласс UITextField.

Edit:

UITextField имеет метод drawTextInRect:, который, вероятно, все, что вам нужно переопределить. Документировано здесь . Если вам нужна дополнительная помощь, попробуйте поискать в Google или выполнить поиск SO, чтобы определить, как создавать подклассы для различных классов пользовательского интерфейса, и почувствуйте, как переопределить методы рисования (например, drawRect: для UIView)

0 голосов
/ 18 ноября 2009

Вот @ реализация моего LinethruLabel, подкласса UILabel. Это указывает на «поцарапанный» элемент с красной линией, нанесенной через текст. В моем случае я звоню [super drawRect:rect];, а UILabel рисует текст, фон и т. Д., Но я не уверен, хотите ли вы этого, так что уберите его, если он работает не так, как вы хотите. Поэтому я думаю, вам нужно будет использовать некоторые варианты drawAtPoint:withFont: методов из категории NSString UIKit.

@implementation LineThruUILabel

- (void)dealloc {
    [super dealloc];
}


- (id)initWithFrame:(CGRect)frame {
    if (self = [super initWithFrame:frame]) {
        // Initialization code
        drawLine = NO;
    }
    return self;
}


- (void) setDrawLine:(BOOL) newValue
{
    if( drawLine != newValue ){
        drawLine = newValue;        
        [self setNeedsDisplay];
    }
}


- (CGSize) calculateLineWidth
{
    NSString *newText = self.text;
    CGFloat actualFontSize;
    CGFloat width = self.frame.size.width;
    CGSize size =  [newText sizeWithFont: self.font minFontSize:self.minimumFontSize 
                          actualFontSize:&actualFontSize 
                                forWidth:width 
                           lineBreakMode:self.lineBreakMode ];
    return size;    
}

- (void)drawRect:(CGRect)rect {

    [super drawRect:rect];

    CGFloat horizOffset = 0.0;

    if( drawLine ){

        CGSize  lineSize = [self calculateLineWidth];

        CGFloat offset = 1.0;

        // Drawing code
        CGContextRef ctx = UIGraphicsGetCurrentContext();
        //CGFloat w = rect.size.width;
        CGFloat h = rect.size.height;

        // just match the color and size of the horizontal line
        CGContextSetRGBStrokeColor(ctx, 1.0, 0.0, 0.0, 1.0); 
        CGContextSetLineWidth(ctx, 2.0);

        CGContextMoveToPoint(ctx,  horizOffset , h/2 + offset );
        CGContextAddLineToPoint(ctx, lineSize.width + horizOffset + 1.0, h/2 + offset);

        CGContextStrokePath(ctx);
    }   


}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...