iOS应用开发中使UITextField实现placeholder属性的方法
2019/7/9 23:19:28
本文主要是介绍iOS应用开发中使UITextField实现placeholder属性的方法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
我们都知道iOS开发中的UITextField有个placeholder属性,placeholder可以很方便引导用户输入。但是UITextView却没有placeholder属性。
一、猥琐的方法
如何让UITextView也有placeholder功能呢?今天给各位分享一个比较猥琐的做法。思路大概是这样的:
- 把UITextView的text当placeholder使用。
- 在开始编辑的代理方法里清除placeholder。
- 在结束编辑的代理方法里在设置placeholder。
实现方法:
1.创建UITextView:
UITextView *textViewPlaceholder = [[UITextView alloc] initWithFrame:CGRectMake(20, 70, SCREEN.width - 40, 100)];
textViewPlaceholder.backgroundColor = [UIColor whiteColor];
textViewPlaceholder.text = @"zyiz.net";
textViewPlaceholder.textColor = [UIColor grayColor];
textViewPlaceholder.delegate = self;
[self.view addSubview:textViewPlaceholder];
初始化UITextView,给UITextView的text赋值,并且给UITextView的textColor属性设置成灰色,让其看起来更像placeholder。
别忘了设置UITextView的代理,因为后面我们要用到UITextView的两个代理方法。
2.开始编辑的代理方法:
- (void)textViewDidBeginEditing:(UITextView *)textView {
if ([textView.text isEqualToString:@"zyiz.net"]) {
textView.text = @"";
textView.textColor = [UIColor blackColor];
}
}
在开始编辑的代理方法里面,判断如果是UITextView的text的值是placeholder,那么,就清空text,并且把textColor设置成真正的内容颜色,假设是黑色。
3.结束编辑的代理方法:
- (void)textViewDidEndEditing:(UITextView *)textView {
if (textView.text.length<1) {
textView.text = @"zyiz.net";
textView.textColor = [UIColor grayColor];
}
}
在结束编辑的代理方法里,判断如果UITextView的text值为空,那么,就要把需要设置的placeholder赋值给UITextView的text,并且将textColor属性设置成灰色。
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];
}
至此,就很猥琐的实现了placeholder功能。为了方便测试,我加了一个手势。作用是用键盘消失,这样可以测试结束编辑的时候placeholder会不会显示。
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
定义placeholder属性,类似于UITextField。
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的实现,如果你有类似需求,直接拿去用吧!具体用法请往下看。
实践:
GGPlaceholderTextView *textView = [[GGPlaceholderTextView alloc] initWithFrame:CGRectMake(0, 64, SCREEN.width , 200)];
textView.backgroundColor = [UIColor whiteColor];
textView.placeholder = @"zyiz.net";
[self.view addSubview:textView];
经过封装后的GGPlaceholderTextView,使用起来是不是跟UITextField非常相似。当然,我封装的比较简单,github上也有一些朋友封装带placeholder属性的UITextView。比如:TextViewPlaceholder。感兴趣的童鞋可以去试用一下。
这篇关于iOS应用开发中使UITextField实现placeholder属性的方法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-12Axios库资料:新手入门必读教程
- 2024-11-11Axios库项目实战:新手入门教程
- 2024-09-29Axios库教程:初学者必备指南
- 2024-08-29Axios库资料:新手入门指南与基本使用教程
- 2024-03-14system bios shadowed
- 2024-03-14gabios
- 2024-02-07iOS应用提交上架的最新流程
- 2024-02-06打包 iOS 的 IPA 文件
- 2023-12-07uniapp打包iOS应用并通过审核:代码混淆的终极解决方案 ?
- 2023-11-25uniapp IOS从打包到上架流程(详细简单) 原创