2012-04-11 3 views
0

Я исследовал, как вручную включать текст PlaceHolder в UITextView (как и многие из StackOverflow), однако, всякий раз, когда я нажимаю TextView и начинаю вводить текст, он не стирает местозаполнитель , и я не уверен, почему. Любая помощь приветствуется! Благодаря!Пользовательский UITextView PlaceHolder не стирается при вводе клавиатуры

#import "HusbandryAddRecord.h" 
#import <QuartzCore/QuartzCore.h> 

@interface HusbandryAddRecord() 

@end 

@implementation HusbandryAddRecord 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
    } 
    return self; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [scroller setScrollEnabled:YES]; 
    [scroller setContentSize:CGSizeMake(320, 601)]; 

    // Round The Corners of the Notes TextView 
    notesTV.clipsToBounds = YES; 
    notesTV.layer.cornerRadius = 10.0f; 

    placeholderLabel = [[UILabel alloc] initWithFrame:CGRectMake(10.0, 0.0, notesTV.frame.size.width - 20.0, 34.0)]; 
    [placeholderLabel setText:@"Notes"]; 
    [placeholderLabel setBackgroundColor:[UIColor clearColor]]; 
    [placeholderLabel setFont:[UIFont fontWithName:@"System" size:14.0]]; 
    [placeholderLabel setTextColor:[UIColor lightGrayColor]]; 

    [notesTV addSubview:placeholderLabel]; 
} 

- (void)viewDidUnload 
{ 
    [notesTV release]; 
    notesTV = nil; 
    [super viewDidUnload]; 
    // Release any retained subviews of the main view. 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 

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

- (void) textViewDidChange:(UITextView *)theTextView { 
    if(![theTextView hasText]) { 
     [theTextView addSubview:placeholderLabel]; 
     [placeholderLabel setText:@"Notes"]; 
    } 

    else if ([[theTextView subviews] containsObject:placeholderLabel]) { 
     [placeholderLabel removeFromSuperview]; 
    } 
} 

- (void)textViewDidEndEditing:(UITextView *)theTextView { 
    if (![theTextView hasText]) { 
     [theTextView addSubview:placeholderLabel]; 
    } 
} 

@end 
+0

Первое, что я вижу неправильно, это то, что вы говорите об изменении текста заполнителя. UITextField, но выше вы определяете атрибуты для UILabel, а затем применяете текст меток в текстовое поле. –

+0

есть. У UITextFields нет PlaceHolder. Вот почему мое название - «Custom UITextView Placeholder». Это одно из решений, что UITextView не имеет заполнителей. – comead

+0

Опечатка, опечатка. Игнорирование. –

ответ

1

Что на самом деле происходит, вы добавляете ярлык к вашему TextView для каждого inputing символов. Таким образом, существует столько ярлыков, которые создаются один за ним, если вы вводите символы, а когда условие встречается, вы удаляете только одну метку, а нижние лежащие метки видны.

Убедитесь, что у вас есть делегат правильно установлен, а затем используйте скрытое свойство вместо добавления и удаления subviews.

- (void)textViewDidChange:(UITextView *)textView 
{ 
    placeholderLabel.hidden = textView.hasText; 
} 
+0

Это тоже не сработало.:/ – comead

+0

вы уверены, что делегат вызван. Установили ли вы делегат в текстовом виде? – iPrabu

+0

WHOOPS! ха-ха. Я случайно неправильно установил делегат .. Спасибо за вашу помощь! Он работает БОЛЬШОЕ! – comead

0

Используйте следующий код, это поможет вам ..

-(void)textViewDidChange:(UITextView *)textView 
{ 
    if([textView.text length]>0){ 
     placeholderLabel.hidden = YES; 
    }else { 
     placeholderLabel.hidden = NO; 
    } 

} 
+0

nope, что тоже ничего не делал. – comead

+0

вы удалили весь код placeholderLabel в методах делегатов UITextView, тогда он будет работать – Narayana

0

Вы добавляете placeHolderLabel на TextView для ввода каждого character.Have посмотреть на этом коде: -

- (BOOL)textViewShouldBeginEditing:(UITextView *)textView 
{ 
[placeholderLabel removeFromSuperview]; 
return YES; 
} 

После этого запись коды для того времени, когда вы сделали с написанием текста в TextView ,

-(IBAction)keyBoard:(id)sender 
{ 
if ([textView.text length]==0) 
{ 
    [textView addSubview:placeholderLabel]; 
} 
[textView resignFirstResponder]; 
} 

эта функция для кнопки, который я принял за пределами textview.On щелчка этой клавиатуры будет dissmiss и он будет проверять, если TextView иметь 0 длину текста, то placeHolderLabel будет снова добавить на it.Hope это помогает. Спасибо :)

0

Используйте lines.It работы

textviewname.editable = YES; textviewname.clearsContextBeforeDrawing = YES;

Смежные вопросы