zoukankan      html  css  js  c++  java
  • 设计带有placeHolder的TextView

    设计带有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:@"
    "]) {
                [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

    需要注意的一些细节:

     

     

  • 相关阅读:
    Liunx之django项目部署
    Liunx之nginx配置
    Liunx之基础学习
    Linux之防火墙【CentOS 7】
    Linux之各程序安装
    Linux之基础命令
    攻城狮必备神注释
    Django-rbac权限
    "/var/lib/mysql/mysql.sock"不存在解决办法
    72张三国历史演变地图
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/4180592.html
Copyright © 2011-2022 走看看