广

IOS开发

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

    iOS应用开发中使UITextField实现placeholder属性的方法

    2018-04-06 10:40:58 次阅读 稿源:互联网
    广告

    我们都知道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<1) {
            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 <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 = @"jb51.net";
    [self.view addSubview:textView];


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

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告