我们都知道iOS开发中的UITextField有个placeholder属性,placeholder可以很方便引导用户输入。但是UITextView却没有placeholder属性。
一、猥琐的方法
如何让UITextView也有placeholder功能呢?今天给各位分享一个比较猥琐的做法。思路大概是这样的:
实现方法:
1.创建UITextView:
UITextView *textViewPlaceholder = [[UITextView alloc] initWithFrame:CGRectMake(20, 70, SCREEN.width - 40, 100)]; textViewPlaceholder.backgroundColor = [UIColor whiteColor]; textViewPlaceholder.text = @"jb51.net"; textViewPlaceholder.textColor = [UIColor grayColor]; textViewPlaceholder.delegate = self; [self.view addSubview:textViewPlaceholder];
别忘了设置UITextView的代理,因为后面我们要用到UITextView的两个代理方法。
2.开始编辑的代理方法:
- (void)textViewDidBeginEditing:(UITextView *)textView {if ([textView.text isEqualToString:@"jb51.net"]) { textView.text = @""; textView.textColor = [UIColor blackColor]; } }
3.结束编辑的代理方法:
- (void)textViewDidEndEditing:(UITextView *)textView { if (textView.text.length<1) { textView.text = @"jb51.net"; textView.textColor = [UIColor grayColor]; } }
4.添加轻击手势
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGesture:)]; tapGesture.numberOfTapsRequired = 1; //点击次数 tapGesture.numberOfTouchesRequired = 1; //点击手指数 [self.view addGestureRecognizer:tapGesture];//轻击手势触发方法 -(void)tapGesture:(UITapGestureRecognizer *)sender { [self.view endEditing:YES]; }
Demo地址:iOSStrongDemo
二、通常的方法
接下来来看比较通常的方法,哈哈~那么,这一次我将简单的封装一个UITextView。暂且取名叫GGPlaceholderTextView,GG前缀看着有点任性的哈。
GGPlaceholderTextView简介:
GGPlaceholderTextView也是对text操作,具体逻辑如下:
继承UITextView,并设置placeholder属性:
注册开始编辑和结束编辑通知,然后对text做相应的操作
通过UIApplicationWillTerminateNotification通知,在APP退出的时候移除通知。
我把GGPlaceholderTextView写在下面。不过,微信里看代码还是不太方便,我已经把代码push到:iOSStrongDemo。你可以下载下来。
GGPlaceholderTextView.h#import <UIKit/UIKit.h>
@interface GGPlaceholderTextView : UITextView @property(nonatomic, strong) NSString *placeholder;
@end
GGPlaceholderTextView.m#import "GGPlaceholderTextView.h"
@implementation GGPlaceholderTextView
- (id)initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame]) { [self addObserver]; } return self; }
- (id)init { if (self = [super init]) { [self addObserver]; } return self; }
- (void)setPlaceholder:(NSString *)placeholder { _placeholder = placeholder; self.text = placeholder; self.textColor = [UIColor grayColor]; }
-(void)addObserver { //注册通知 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didBeginEditing:) name:UITextViewTextDidBeginEditingNotification object:self]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didEndEditing:) name:UITextViewTextDidEndEditingNotification object:self]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(terminate:) name:UIApplicationWillTerminateNotification object:[UIApplication sharedApplication]]; }
- (void)terminate:(NSNotification *)notification { //移除通知 [[NSNotificationCenter defaultCenter] removeObserver:self]; }
- (void)didBeginEditing:(NSNotification *)notification { if ([self.text isEqualToString:self.placeholder]) { self.text = @""; self.textColor = [UIColor blackColor]; } }
- (void)didEndEditing:(NSNotification *)notification { if (self.text.length<1) { self.text = self.placeholder; self.textColor = [UIColor grayColor]; } }
@end
实践:
GGPlaceholderTextView *textView = [[GGPlaceholderTextView alloc] initWithFrame:CGRectMake(0, 64, SCREEN.width , 200)]; textView.backgroundColor = [UIColor whiteColor]; textView.placeholder = @"jb51.net"; [self.view addSubview:textView];
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:notice#nhooo.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。