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?
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?
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];
}
}
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
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];
}
}
Hier ist eine einfache und clevere Methode, um das perfekte Verhalten zu erreichen.
Wir leihen uns den Platzhalter von UITextField
.
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];
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;
}
Das ist alles.
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 .
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ß :)
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.
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
Hier ist eine kleine und geniale Lösung für dieses Problem
24 Stimmen
Wie wäre es mit der Kategorie UITextView+Placeholder? github.com/devxoul/UITextView-Platzhalter
2 Stimmen
Ich bevorzuge die Lösung von @devxoul, da sie Kategorie und nicht Unterklasse verwendet. Außerdem erzeugt sie ein Feld für "Platzhalter"-Optionen (Platzhaltertext und Textfarbe) in IBs Inspektor. Sie verwendet einige Bindungstechniken. Was für ein toller Code
0 Stimmen
Wenn Sie Folgendes verwenden
UITextView
wird die Lösung ganz anders aussehen. Hier sind ein paar Lösungen. Schwebender Platzhalter y Gefälschte Native Platzhalter0 Stimmen
Versuchen Sie diese Antwort :) [_textView setTextColor:[UIColor lightGrayColor]];
0 Stimmen
@ICoffeeConsumer Interessant ist, dass die native iOS-Kalender-App mehrzeiligen editierbaren Text hat - mit einem Platzhalter (Hinzufügen von "Notizen" zu einem Ereignis). Es gibt also einen direkten Beweis dafür, dass Apple selbst die Notwendigkeit/Nutzung dafür erkennt.