UITextView 和 UITextField 的提示信息placeholder


一、UITextFiled和UITextView很像,区别是前一个是只显示一行文本(即使打了回车,可只是显示一行),后一个可显示多行文本。两个的delegate方法也很像.

但是UITextFiled有一个属性placeholder,即文本框的提示信息。而UITextView则没有。一般当点击文本框的时候都需要将默认的提示信息去掉,将光标移动到开始位置。

 

但是对于UITextView则没有placeholder这个属性,可以直接设置textView.text = @"请您输入电话号码". 清除默认的text有几种方法

1.在UITextView上添加一个UILabel,再在-(void)textviewDidChanged:(UITextView*)textView方法中移除掉这个Label,[label  removeFromSuperView];

2.继承UITextView,在drawRect中添加或者删除placeholder:  参考http://stackoverflow.com/questions/1328638/placeholder-in-uitextview

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
SSTextView.h
 
//
//  SSTextView.h
//  SSToolkit
//
//  Created by Sam Soffes on 8/18/10.
//  Copyright 2010-2011 Sam Soffes. All rights reserved.
//
 
/**
  UITextView subclass that adds placeholder support like UITextField has.
  */
@interface  SSTextView : UITextView
 
/**
  The string that is displayed when there is no other text in the text view.
 
  The default value is `nil`.
  */
@property  ( nonatomic , retain) NSString  *placeholder;
 
/**
  The color of the placeholder.
 
  The default is `[UIColor lightGrayColor]`.
  */
@property  ( nonatomic , retain) UIColor *placeholderColor;
 
@end
 
SSTextView.m
 
//
//  SSTextView.m
//  SSToolkit
//
//  Created by Sam Soffes on 8/18/10.
//  Copyright 2010-2011 Sam Soffes. All rights reserved.
//
 
#import "SSTextView.h"
 
@interface  SSTextView ()
- ( void )_initialize;
- ( void )_updateShouldDrawPlaceholder;
- ( void )_textChanged:( NSNotification  *)notification;
@end
 
 
@implementation  SSTextView {
     BOOL  _shouldDrawPlaceholder;
}
 
 
#pragma mark - Accessors
 
@synthesize  placeholder = _placeholder;
@synthesize  placeholderColor = _placeholderColor;
 
- ( void )setText:( NSString  *)string {
     [ super  setText:string];
     [ self  _updateShouldDrawPlaceholder];
}
 
 
- ( void )setPlaceholder:( NSString  *)string {
     if  ([string isEqual:_placeholder]) {
         return ;
     }
 
     [_placeholder release];
     _placeholder = [string retain];
 
     [ self  _updateShouldDrawPlaceholder];
}
 
 
#pragma mark - NSObject
 
- ( void )dealloc {
     [[ NSNotificationCenter  defaultCenter] removeObserver: self  name:UITextViewTextDidChangeNotification object: self ];
 
     [_placeholder release];
     [_placeholderColor release];
     [ super  dealloc];
}
 
 
#pragma mark - UIView
 
- ( id )initWithCoder:( NSCoder  *)aDecoder {
     if  (( self  = [ super  initWithCoder:aDecoder])) {
         [ self  _initialize];
     }
     return  self ;
}
 
 
- ( id )initWithFrame:(CGRect)frame {
     if  (( self  = [ super  initWithFrame:frame])) {
         [ self  _initialize];
     }
     return  self ;
}
 
 
- ( void )drawRect:(CGRect)rect {
     [ super  drawRect:rect];
 
     if  (_shouldDrawPlaceholder) {
         [_placeholderColor set];
         [_placeholder drawInRect:CGRectMake(8.0f, 8.0f, self .frame.size.width - 16.0f, self .frame.size.height - 16.0f) withFont: self .font];
     }
}
 
 
#pragma mark - Private
 
- ( void )_initialize {
     [[ NSNotificationCenter  defaultCenter] addObserver: self  selector: @selector (_textChanged:) name:UITextViewTextDidChangeNotification object: self ];
 
     self .placeholderColor = [UIColor colorWithWhite:0.702f alpha:1.0f];
     _shouldDrawPlaceholder = NO ;
}
 
 
- ( void )_updateShouldDrawPlaceholder {
     BOOL  prev = _shouldDrawPlaceholder;
     _shouldDrawPlaceholder = self .placeholder && self .placeholderColor && self .text.length == 0;
 
     if  (prev != _shouldDrawPlaceholder) {
         [ self  setNeedsDisplay];
     }
}
 
 
- ( void )_textChanged:( NSNotification  *)notificaiton {
     [ self  _updateShouldDrawPlaceholder];   
}
 
@end

 3.还是使用UITextView的delegate方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
- ( BOOL ) textViewShouldBeginEditing:(UITextView *)textView
{
     if (textView.tag == 0) {
         textView.text = @ "" ;
         textView.textColor = [UIColor blackColor];
         textView.tag = 1;
     }
     return  YES ;
}
- ( void )textViewDidChange:(UITextView *)textView
{
    if ([textView.text length] == 0)
    {
        textView.text = @ "Foobar placeholder" ;
        textView.textColor = [UIColor lightGrayColor];
        textView.tag = 0;
    }
}

 

二、如果希望一进入Controller页面,就显示键盘,可以在viewWillAppear或者viewDidAppear中 添加[textFiled becomeFirstResponser]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值