754 Stimmen

Platzhalter in UITextView

Meine Anwendung verwendet ein UITextView . Jetzt möchte ich die UITextView einen Platzhalter zu haben, der dem Platzhalter ähnelt, den Sie für eine UITextField .

Wie kann man das tun?

0 Stimmen

Der TTTextEditor von Three20 (der seinerseits UITextField verwendet) unterstützt sowohl Platzhaltertext als auch das Wachsen nach Höhe (er wird zu einem UITextView).

0 Stimmen

24 Stimmen

Wie wäre es mit der Kategorie UITextView+Placeholder? github.com/devxoul/UITextView-Platzhalter

4voto

Chris Punkte 21

Hier ist eine weitere Möglichkeit, die die leichte Einkerbung von UITextField Platzhalter:

Ziehen Sie eine UITextField direkt unter dem UITextView so, dass ihre oberen linken Ecken aufeinander ausgerichtet sind. Fügen Sie Ihren Platzhaltertext in das Textfeld ein.

In viewDidLoad, hinzufügen:

[tView setDelegate:self];
tView.contentInset = UIEdgeInsetsMake(-8,-8,0,0);
tView.backgroundColor = [UIColor clearColor];

Dann fügen Sie hinzu:

- (void)textViewDidChange:(UITextView *)textView {
    if (textView.text.length == 0) {
        textView.backgroundColor = [UIColor clearColor];            
    } else {
        textView.backgroundColor = [UIColor whiteColor];
    }
}

4voto

Nithin M Keloth Punkte 1585

Machen wir es uns leicht

Erstellen Sie ein UILabel und platzieren Sie es in Ihrer Textansicht (geben Sie dem Text einen Platzhalter - setzen Sie die Farbe grau - Sie können dies alles in Ihrer XIB tun) Nun deklarieren Sie in Ihrer Header-Datei das UILabel und auch das textviewDelegate Jetzt können Sie das Label einfach ausblenden, wenn Sie auf die Textansicht klicken

vollständiger Code unten

Kopfzeile

@interface ViewController :UIViewController<UITextViewDelegate>{
 }
   @property (nonatomic,strong) IBOutlet UILabel *PlceHolder_label;
   @property (nonatomic,strong) IBOutlet UITextView *TextView;

@end

Umsetzung

@implementation UploadFoodImageViewController
@synthesize PlceHolder_label,TextView;

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

 - (BOOL)textViewShouldBeginEditing:(UITextView *)textView{

       if([textView isEqual:TextView]){
            [PlceHolder_label setHidden:YES];
            [self.tabScrlVw setContentOffset:CGPointMake(0,150) animated:YES];
          }
      return YES;
    }

@Ende

Vergessen Sie nicht, die textView und UILabel mit filesowner von xib zu verbinden

3voto

Lucas Punkte 6597

Ich habe eine Instanzvariable erstellt, um zu prüfen, ob der Platzhalter angezeigt wird oder nicht:

BOOL showPlaceHolder;
UITextView * textView; // and also the textView

Auf viewDidLoad setze ich:

[self setPlaceHolder]; 

Das funktioniert folgendermaßen:

- (void)setPlaceholder
{
    textView.text = NSLocalizedString(@"Type your question here", @"placeholder");
    textView.textColor = [UIColor lightGrayColor];
    self.showPlaceHolder = YES; //we save the state so it won't disappear in case you want to re-edit it
}

Ich habe auch eine Schaltfläche zum Zurücktreten der Tastatur erstellt. Sie müssen dies nicht tun, aber das Coole daran ist, dass der Platzhalter wieder angezeigt wird, wenn nichts eingegeben wurde

- (void)textViewDidBeginEditing:(UITextView *)txtView 
{
    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(resignKeyboard)];
    if (self.showPlaceHolder == YES) 
    {
        textView.textColor = [UIColor blackColor];
        textView.text = @"";
        self.showPlaceHolder = NO;
    }
}

- (void)resignKeyboard 
{
    [textView resignFirstResponder];
    //here if you created a button like I did to resign the keyboard, you should hide it
    if (textView.text.length == 0) {
        [self setPlaceholder];
    }       
}

3voto

Tim Chen Punkte 1296

Hier ist eine einfache und clevere Methode, um das perfekte Verhalten zu erreichen.

Wir leihen uns den Platzhalter von UITextField .

enter image description here

  1. Ein textField einrichten und dessen Text transparent machen.

    self.placeholderTextField = [[UITextField alloc] init];
    
    /* adjust the frame to fit it in the first line of your textView */
    self.placeholderTextField.frame = CGRectMake(0.0, 0.0, yourTextView.width, 30.0);
    
    self.placeholderTextField.textColor = [UIColor clearColor];
    self.placeholderTextField.userInteractionEnabled = NO;
    self.placeholderTextField.font = yourTextView.font;
    self.placeholderTextField.placeholder = @"sample placeholder";
    [yourTextView addSubview:self.placeholderTextField];
  2. Setzen Sie den Delegaten von textView und synchronisieren Sie textField und textView.

    yourTextView.delegate = self;

    entonces

    - (void)textViewDidChange:(UITextView *)textView {
    
        self.placeholderTextField.text = textView.text;
    
    }
  3. Das ist alles.

0 Stimmen

Ich mochte diese Lösung zunächst - eine innovative Idee -, aber sie verursachte Probleme beim Scrollen und Verzögerungen und ist nicht modular, also wechselte ich zu SAMTextView .

3voto

Kiarash Punkte 1511

OK, mein Ansewer ist ein bisschen anders Ich erstelle eine kleine Klasse, die das für Sie erledigt.

TextViewShader.m Datei

#import "TextViewShader.h"

@implementation TextViewShader
-(id)initWithShadedTextView:(NSString *)text textViewToShade:(UITextView *)textview {
    self = [super initWithFrame:textview.frame];
    if (self) {
        if (shadeLabel==nil)
        {
            shadeLabel= [[UILabel alloc]initWithFrame:CGRectMake(10, 0, textview.frame.size.width, 30)];

    }
    shadeLabel.text =text;// @"Enter Your Support Request";
    shadeLabel.textColor = [UIColor lightGrayColor];
    [textview setDelegate: self];
    [textview addSubview:shadeLabel];
}
return self;
}

-(void)textViewDidChange:(UITextView *)textView{
        if (textView.text.length==0)
        {
            shadeLabel.hidden=false; 
        }
        else
        {
            shadeLabel.hidden=true;
        }

}

@end

TextViewShader.h-Datei

#import <UIKit/UIKit.h>

@interface TextViewShader : UIView<UITextViewDelegate>{
    UILabel *shadeLabel;

}
-(id)initWithShadedTextView:(NSString *)text textViewToShade:(UITextView *)textview ;
@end

Dies ist die einfache eine Zeile des Codes Verwendung (vergessen Sie nicht, #import "TextViewShader.h" hinzufügen)

 TextViewShader* shader = [[TextViewShader alloc]initWithShadedTextView:@"Enter Your Support Request" textViewToShade: youruitextviewToshade];

viel Spaß :)

0 Stimmen

Die Delegate-Methode von UITextView wird nicht in der Shader-Klasse aufgerufen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X