设计带有placeHolder的TextView

效果:

源码:

PlaceholderTextView.h 与 PlaceholderTextView.m

//
//  PlaceholderTextView.h
//  YXTextView
//
//  Created by YouXianMing on 14/12/23.
//  Copyright (c) 2014年 YouXianMing. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface PlaceholderTextView : UIView

// 获取的字符串
@property (nonatomic, strong, readonly) NSString *string;

// textView
@property (nonatomic, strong) UITextView  *textView;

// 占位字符
@property (nonatomic, strong) NSString    *placeHolderString;

// 文本边缘留白
@property(nonatomic, assign) UIEdgeInsets  textContainerInset;

// 颜色设置
@property (nonatomic, strong) UIColor     *editTextColor;
@property (nonatomic, strong) UIColor     *placeHolderColor;

// 返回键是否用来做取消第一响应者
@property (nonatomic, assign) BOOL         returnButtonToResignFirstResponder;

// 取消第一响应者
- (void)resignTextViewFirstResponder;

@end
//
//  PlaceholderTextView.m
//  YXTextView
//
//  Created by YouXianMing on 14/12/23.
//  Copyright (c) 2014年 YouXianMing. All rights reserved.
//

#import "PlaceholderTextView.h"

@interface PlaceholderTextView ()<UITextViewDelegate>

@property (nonatomic, strong) NSString *string;

@end

@implementation PlaceholderTextView

- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        [self createTextView];
    }
    return self;
}

- (void)createTextView {
    self.textView                 = [[UITextView alloc] initWithFrame:self.bounds];
    self.textView.delegate        = self;
    self.textView.backgroundColor = [UIColor clearColor];
    self.textView.textColor       = [UIColor grayColor];
    [self addSubview:self.textView];
}

#pragma mark - 代理方法
- (BOOL)textViewShouldBeginEditing:(UITextView *)textView {
    // 设置编辑状态文字颜色
    textView.textColor = (self.editTextColor == nil ? [UIColor blackColor] : self.editTextColor);

    // 如果文字为placeHolder文字
    if ([textView.text isEqualToString:self.placeHolderString]) {
        textView.text = @"";
    }

    return YES;
}
- (BOOL)textViewShouldEndEditing:(UITextView *)textView {
    // 如果长度为0,则显示placeHolder文字
    if (textView.text.length == 0) {
        textView.text      = self.placeHolderString;
        textView.textColor = (self.placeHolderColor == nil ? [UIColor grayColor] : self.placeHolderColor);
    }

    return YES;
}
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {

    if (_returnButtonToResignFirstResponder == YES) {
        if ([text isEqualToString:@"\n"]) {
            [textView resignFirstResponder];
            return NO;
        }
    }

    return YES;
}

- (void)resignTextViewFirstResponder {
    [self.textView resignFirstResponder];
}

#pragma mark - 重写setter,getter方法
@synthesize string = _string;
- (NSString *)string {
    if ([self.textView.text isEqualToString:self.placeHolderString]) {
        return @"";
    } else {
        return self.textView.text;
    }
}
@synthesize placeHolderColor = _placeHolderColor;
- (void)setPlaceHolderColor:(UIColor *)placeHolderColor {
    _placeHolderColor       = placeHolderColor;
    self.textView.textColor = _placeHolderColor;
}
- (UIColor *)placeHolderColor {
    return _placeHolderColor;
}

@synthesize placeHolderString = _placeHolderString;
- (void)setPlaceHolderString:(NSString *)placeHolderString {
    _placeHolderString = placeHolderString;
    _textView.text     = placeHolderString;
}
- (NSString *)placeHolderString {
    return _placeHolderString;
}
@synthesize textContainerInset = _textContainerInset;
- (void)setTextContainerInset:(UIEdgeInsets)textContainerInset {
    _textContainerInset          = textContainerInset;
    _textView.textContainerInset = textContainerInset;
}
- (UIEdgeInsets)textContainerInset {
    return _textContainerInset;
}

@end

控制器源码:

//
//  ViewController.m
//  YXTextView
//
//  Created by YouXianMing on 14/12/23.
//  Copyright (c) 2014年 YouXianMing. All rights reserved.
//

#import "ViewController.h"
#import "PlaceholderTextView.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    self.view.backgroundColor = [UIColor blackColor];

    PlaceholderTextView *textView = [[PlaceholderTextView alloc] initWithFrame:CGRectMake(-1, 100, 322, 100)];
    [self.view addSubview:textView];

    textView.layer.borderWidth  = 1.f;
    textView.layer.borderColor  = [UIColor purpleColor].CGColor;

    textView.returnButtonToResignFirstResponder = YES;
    textView.textView.font      = [UIFont fontWithName:@"HelveticaNeue-Thin" size:22.f];
    textView.placeHolderColor   = [UIColor cyanColor];
    textView.editTextColor      = [UIColor redColor];
    textView.textContainerInset = UIEdgeInsetsMake(10, 10, 10, 10);
    textView.placeHolderString  = @"Input your name, please...";
}

@end

需要注意的一些细节:

时间: 2024-10-02 03:55:22

设计带有placeHolder的TextView的相关文章

新浪微博客户端(36)-自定义带placeholder的TextView

iOS 上自带的UITextView竟然不能设置placeholder,但是UITextView却可以,我也真是醉了.没办法了,自己写一个 DJTextView.h #import <UIKit/UIKit.h> @interface DJTextView : UITextView @property (nonatomic,copy) NSString *placeholder; @property (nonatomic,strong) UIColor *placeholderColor; @

iOS学习资源收集

https://github.com/Tim9Liu9/TimLiu-iOS 自己总结的iOS.mac开源项目及库,持续更新.... github排名 https://github.com/trending,github搜索:https://github.com/search 目录 UI 下拉刷新 模糊效果 AutoLayout 富文本 图表 表相关与Tabbar 隐藏与显示 HUD与Toast 对话框 其他UI 动画 侧滑与右滑返回手势 gif动画 其他动画 网络相关 网络连接 图像获取 网络

IOS开发比较实用的框架总结(上)

下拉刷新类型的框架 [EGOTableViewPullRefresh](https://github.com/enormego/EGOTableViewPullRefresh) - 最早的下拉刷新控件. [SVPullToRefresh](https://github.com/samvermette/SVPullToRefresh) - 下拉刷新控件. [MJRefresh](https://github.com/CoderMJLee/MJRefresh) - 仅需一行代码就可以为UITable

iOS开发常用三方库、插件、知名博客等等

TimLiu-iOS   Swift版本点击这里 欢迎加入QQ交流群: 594119878 介绍 这是一个用于iOS开发的各种开源库.开源资料.开源技术等等的索引库. github排名 https://github.com/trending,github搜索:https://github.com/search 使用方法 根据目录关键字搜索,记得包含@,以保证搜索目录关键字的唯一性. 问题反馈 期待大家和我们一起共同维护,同时也期望大家随时能提出宝贵的意见(直接提交issues即可).请广大网友只

iOS 第三方库、插件、知名博客总结

用到的组件1.通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SDWebImage多个缩略图缓存组件 UICKeyChainStore存放用户账号密码组件 Reachability监测网络状态 DateTools友好化时间 MBProgressHUD一款提示框第三方库 MWPhotoBrowser一款简单的 iOS 照片浏览控件 CTAssetsPickerController一个选择器组件, 支持从用户的相片库选择多张照片和视频. QB

[iOS UI进阶 - 1] 自定义控件

A.关于Quiartz2D的一些细节 1.UIKit的工具已经封装了上下文引用,所以不用手动获取和渲染 1 - (void)drawRect:(CGRect)rect { 2 [[UIColor redColor] set]; 3 UIRectFill(CGRectMake(0, 0, 100, 100)); 4 } 2.多个path 1 - (void)drawRect:(CGRect)rect { 2 CGContextRef ctx = UIGraphicsGetCurrentContex

iOS 网络资源汇总

下拉刷新 模糊效果 AutoLayout 富文本 图表 表相关与Tabbar 隐藏与显示 HUD与Toast 对话框 其他UI 具体内容 下拉刷新 EGOTableViewPullRefresh - 最早的下拉刷新控件. SVPullToRefresh - 下拉刷新控件. MJRefresh - 仅需一行代码就可以为UITableView或者CollectionView加上下拉刷新或者上拉刷新功能.可以自定义上下拉刷新的文字说明.具体使用看"使用方法". (国人写) XHRefresh

iOS 网络资源汇总之UI

目录 下拉刷新 模糊效果 AutoLayout 富文本 图表 表相关与Tabbar 隐藏与显示 HUD与Toast 对话框 其他UI 具体内容 下拉刷新 EGOTableViewPullRefresh - 最早的下拉刷新控件. SVPullToRefresh - 下拉刷新控件. MJRefresh - 仅需一行代码就可以为UITableView或者CollectionView加上下拉刷新或者上拉刷新功能.可以自定义上下拉刷新的文字说明.具体使用看"使用方法". (国人写) XHRefr

自定义textView,增加placeholder属性

iOS文本输入框有两种:UITextField和UITextView.一般情况下,UITextField可以满足我们开发的需求,输入文字,系统自带placeHolder属性,直接用点语法赋值就可以实现功能需求. 然而,有些时候我们可能会用到UITextView,系统提供的UITextView是没有自带placeHolder属性的.想要实现placeHolder样式有至少两种方法: 1.添加一个label当作placeHolder的载体.实现UITextViewDelegate方法,监听文本输入框