2012-04-11 11 views
0

Ich habe untersucht, wie man eine PlaceHolder Text in UITextView manuell hinzufügen (wie es viele auf StackOverflow), aber wenn ich auf die TextView klicken und die Eingabe starten, löscht es nicht den Platzhalter und ich bin mir nicht sicher warum. Jede Hilfe wird geschätzt! Vielen Dank!Benutzerdefinierte UITextView PlaceHolder nicht bei Tastatureintrag löschen

#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

Das erste, was ich falsch sehe, ist, dass Sie über das Ändern von Platzhaltertext von sprechen. UITextField aber oberhalb definieren Sie Attribute für ein UILabel und wenden dann den Beschriftungstext auf das Textfeld an. –

+0

ja. UITextFields haben keinen PlaceHolder. Aus diesem Grund lautet mein Titel "Custom UITextView Placeholder". Dies ist eine der Lösungen für UITextView, keine Platzhalter zu haben. – comead

+0

Sorry, Tippfehler. Außer Acht lassen. –

Antwort

1

Was ist wirklich passiert Sie das Etikett zu Ihrem Textview für jede inputing Zeichen hinzufügen. Es werden also so viele Labels wie oben beschrieben erstellt, wenn Sie Zeichen eingeben. Wenn die Bedingung erfüllt ist, entfernen Sie nur ein Label und die darunter liegenden Labels sind sichtbar.

Stellen Sie sicher, dass der Delegat ordnungsgemäß festgelegt ist, und verwenden Sie dann die ausgeblendete Eigenschaft, anstatt Unteransichten hinzuzufügen und zu entfernen.

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

Das hat auch nicht funktioniert ..:/ – comead

+0

sind Sie sicher, dass der Delegat aufgerufen wird. Haben Sie den Delegaten auf die Textansicht festgelegt? – iPrabu

+0

WHOOPS! Haha. Ich habe versehentlich den Delegierten falsch eingestellt .. Danke für Ihre Hilfe! Es funktioniert super! – comead

0

Verwenden folgenden Code es Ihnen helfen ..

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

} 
+0

Nein, das hat auch nichts getan. – comead

+0

Sie haben alle Code von PlatzhalterLabel in UITextView Delegate Methoden dann wird es funktionieren – Narayana

0

Sie fügen placeHolderLabel auf Textview für auf diesem Code bei jedem character.Have einen Blick eingeben: -

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

Nach diesem Schreibcode für die Zeit, wenn Sie mit Ihrem Text schriftlich in Textview getan werden .

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

diese Funktion für den Knopf, die ich außerhalb des textview.On Klick dieser Tastatur teilgenommen haben, wird dissmiss sein, und es wird geprüft, ob Textview 0 Textlänge haben, dann wird placeHolderLabel wieder auf it.Hope hinzufügen, es hilft. Thanks :)

0

Verwenden Sie die lines.It arbeitet

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

Verwandte Themen