2014-01-06 4 views
1

Я использую подкласс UITextField для рисования строки «m3» всегда в конце текстового поля, но что-то не работает. Я знаю, что метод вызван, потому что я протестировал его с помощью NSLog, что я делаю неправильно?drawRect метод not drawing

Мой класс:

// Only override drawRect: if you perform custom drawing. 
// An empty implementation adversely affects performance during animation. 
- (void)drawRect:(CGRect)rect 
{ 

    NSString *strM3 = [[NSString alloc] initWithFormat:@" m³"]; 

    /// Make a copy of the default paragraph style 
    NSMutableParagraphStyle *paragraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy]; 
    /// Set line break mode 
    paragraphStyle.lineBreakMode = NSLineBreakByTruncatingTail; 
    /// Set text alignment 
    paragraphStyle.alignment = NSTextAlignmentRight; 

    NSDictionary *attributes = @{ NSFontAttributeName:[UIFont fontWithName:@"HelveticaNeue-Bold" size:12.0], 
            NSParagraphStyleAttributeName:paragraphStyle}; 

    [strM3 drawInRect:rect withAttributes:attributes]; 

} 
+1

UITextField имеет много вещей, нарисованных наверх это сам. Фоновые рисунки будут покрыты всеми этими вещами. Чтобы проверить это, вы можете программно удалить все подзоны и посмотреть, появляется ли ваш «m3». 'for (UIView * subview в textField.subviews) [subview removeFromSuperview];'. Я думаю, вам нужно будет установить текст по умолчанию, а затем изменить входной текст всякий раз, когда вводится новый символ. – Putz1103

ответ

2

UITextField имеет много вещей, нарисованных наверх это сам. Фоновые рисунки будут покрыты всеми этими вещами. Чтобы проверить это, вы можете программно удалить все подзоны и посмотреть, появляется ли ваш «m3».

for(UIView *subview in textField.subviews) [subview removeFromSuperview]; 

Я думаю, что вы будете иметь, чтобы установить текст по умолчанию, а затем изменить текст ввода всякий раз, когда новый символ вводится. Настройка UITextViewDelegate и перегрузить функцию shouldChangeCharactersInRange:

- (BOOL) textField: (UITextField *)theTextField shouldChangeCharactersInRange: (NSRange)range replacementString: (NSString *)string {  
    //Do some string manipulation in here to remove the "m3", then add the user's input, then replace the "m3" 
} 
+0

Похоже, но только удаление других подзонов, как я могу отправить свое представление в верхнюю часть других? –

+0

Вы не можете. DrawRect пытается нарисовать объекты на самом нижнем уровне иерархии представления. UITextView имеет встроенные вложенные объекты, которые перекрывают каждый пиксель представления, поэтому самое дно иерархии представлений не отображается нигде. Единственный способ получить то, что вы хотите, это сделать пользовательский UITextView с нуля, удалить apple, встроенный в subviews, или изменить строку текстового поля для каждого пользовательского ввода. – Putz1103

+0

Я пытался изменить для каждого пользователя imput, но он не мог использовать кнопку backspace, это нормально? –