Est-il possible d'insérer un espace réservé dans un UITextView
similaire au UITextField
? Si oui, alors envoyez-moi un lien ou une idée pour implémenter cette fonctionnalité.
Il n'est pas possible de créer un espace réservé dans UITextView, mais vous pouvez générer un effet comme un espace réservé.
- (void)viewDidLoad {
commentTxtView.text = @"Comment";
commentTxtView.textColor = [UIColor lightGrayColor];
commentTxtView.delegate = self;
}
- (BOOL) textViewShouldBeginEditing:(UITextView *)textView {
commentTxtView.text = @"";
commentTxtView.textColor = [UIColor blackColor];
return YES;
}
-(void) textViewDidChange:(UITextView *)textView {
if(commentTxtView.text.length == 0) {
commentTxtView.textColor = [UIColor lightGrayColor];
commentTxtView.text = @"Comment";
[commentTxtView resignFirstResponder];
}
}
-(void) textViewShouldEndEditing:(UITextView *)textView {
if(commentTxtView.text.length == 0) {
commentTxtView.textColor = [UIColor lightGrayColor];
commentTxtView.text = @"Comment";
[commentTxtView resignFirstResponder];
}
}
OU vous pouvez ajouter une étiquette dans textview comme
lbl = [[UILabel alloc] initWithFrame:CGRectMake(10.0, 0.0,textView.frame.size.width - 10.0, 34.0)];
[lbl setText:kDescriptionPlaceholder];
[lbl setBackgroundColor:[UIColor clearColor]];
[lbl setTextColor:[UIColor lightGrayColor]];
textView.delegate = self;
[textView addSubview:lbl];
et réglé
- (void)textViewDidEndEditing:(UITextView *) textView {
if (![textView hasText]) {
lbl.hidden = NO;
}
}
- (void) textViewDidChange:(UITextView *)textView {
if(![textView hasText]) {
lbl.hidden = NO;
}
else {
lbl.hidden = YES;
}
}
Une autre solution simple consiste simplement à ajouter un UILabel
à votre sous-vue UITextView
.
- (void)viewDidLoad
{
[super viewDidLoad];
// you might have to play around a little with numbers in CGRectMake method
// they work fine with my settings
placeholderLabel = [[UILabel alloc] initWithFrame:CGRectMake(10.0, 0.0, textView.frame.size.width - 20.0, 34.0)];
[placeholderLabel setText:kDescriptionPlaceholder];
// placeholderLabel is instance variable retained by view controller
[placeholderLabel setBackgroundColor:[UIColor clearColor]];
[placeholderLabel setFont:[challengeDescription font]];
[placeholderLabel setTextColor:[UIColor lightGrayColor]];
// textView is UITextView object you want add placeholder text to
[textView addSubview:placeholderLabel];
}
- (void) textViewDidChange:(UITextView *)theTextView
{
if(![textView hasText]) {
[textView addSubview:placeholderLabel];
} else if ([[textView subviews] containsObject:placeholderLabel]) {
[placeholderLabel removeFromSuperview];
}
}
- (void)textViewDidEndEditing:(UITextView *)theTextView
{
if (![textView hasText]) {
[textView addSubview:placeholderLabel];
}
}
Vous pouvez même ajouter de petites animations pour ouvrir/fermer en fondu le UILabel
si c'est votre goût.
- (void) textViewDidChange:(UITextView *)theTextView
{
if(![textView hasText]) {
[textView addSubview:placeholderLabel];
[UIView animateWithDuration:0.15 animations:^{
placeholderLabel.alpha = 1.0;
}];
} else if ([[textView subviews] containsObject:placeholderLabel]) {
[UIView animateWithDuration:0.15 animations:^{
placeholderLabel.alpha = 0.0;
} completion:^(BOOL finished) {
[placeholderLabel removeFromSuperview];
}];
}
}
- (void)textViewDidEndEditing:(UITextView *)theTextView
{
if (![textView hasText]) {
[textView addSubview:placeholderLabel];
[UIView animateWithDuration:0.15 animations:^{
placeholderLabel.alpha = 1.0;
}];
}
Une autre solution simple consiste à définir YES/NO pour les propriétés cachées de placeholderLabel.
- (void)textViewDidEndEditing:(UITextView *)theTextView
{
if (![textView hasText]) {
placeholderLabel.hidden = NO;
}
}
- (void) textViewDidChange:(UITextView *)textView
{
if(![textView hasText]) {
placeholderLabel.hidden = NO;
}
else{
placeholderLabel.hidden = YES;
}
}
-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
// NSLog(@"REPlace %@ %d",text,range.location);
if(range.location==0 && ![text isEqualToString:@""])
{
placeholderlbl.hidden = YES;
}
else if(range.location==0)
{
placeholderlbl.hidden = NO;
}
return YES;
}
Vous pouvez utiliser la fonction ci-dessous pour créer un espace réservé. Cette option vous permet de définir un espace réservé.
[self addTextViewPlaceholder:self.txtvComment withPlaceholder:@"COMMENT"];
-(void) addTextViewPlaceholder:(UITextView*) tView withPlaceholder:(NSString*) placeholder
{
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(9,8,tView.bounds.size.width - 16,0)];
label.lineBreakMode = UILineBreakModeWordWrap;
label.numberOfLines = 0;
label.font = [UIFont systemFontOfSize:13.0];
label.backgroundColor = [UIColor clearColor];
label.textColor = [UIColor colorWithRed:0.7 green:0.7 blue:0.7 alpha:1.0];
label.text = placeholder;
label.alpha = 1;
label.tag = 999;
[tView addSubview:label];
[label sizeToFit];
if(![tView.text isEqualToString:@""])
[label setAlpha:0];
[label release];
}
Vous pouvez gérer le texte d’espace réservé en utilisant ceci.
- (void)textViewDidChange:(UITextView *)textView
{
[self textChange:textView];
}
- (void)textChange:(UITextView *)textView
{
if([textView.text length]>0)
[[textView viewWithTag:999] setAlpha:0];
else
[[textView viewWithTag:999] setAlpha:1];
}
Une autre solution consiste à placer un espace réservé UITextView juste au-dessus de UITextView. Donnez-lui le même cadre. Ensemble placeholderTextView.enabled = NO
pour l'espace réservé TextView.
Ensuite, définissez le délégué pour le textView normal uniquement et définissez cette méthode UITextViewDelegate:
- (void)textViewDidChange:(UITextView *)textView
{
NSLog(@"textViewDidChange");
if(self.textView.text.length == 0)
{
self.placeholderTextView.hidden = NO;
}
else
{
self.placeholderTextView.hidden = YES;
}
}