ios应用开发之uitextfield实现placeholder属性介绍-kb88凯时官网登录

时间:2023-04-15
阅读:
免费资源网 - https://freexyz.cn/

我们都知道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 = @"jb51.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:@"jb51.net"]) {
        textview.text = @"";
        textview.textcolor = [uicolor blackcolor];
    }
}


在开始编辑的代理方法里面,判断如果是uitextview的text的值是placeholder,那么,就清空text,并且把textcolor设置成真正的内容颜色,假设是黑色。

3.结束编辑的代理方法:

 
- (void)textviewdidendediting:(uitextview *)textview {
    if (textview.text.length         textview.text = @"jb51.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

@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         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 = @"jb51.net";
[self.view addsubview:textview];

 


经过封装后的ggplaceholdertextview,使用起来是不是跟uitextfield非常相似。当然,我封装的比较简单,github上也有一些朋友封装带placeholder属性的uitextview。比如:textviewplaceholder。感兴趣的童鞋可以去试用一下。

免费资源网 - https://freexyz.cn/
返回顶部
顶部
网站地图