欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

设计带有placeHolder的TextView

程序员文章站 2024-01-27 22:34:46
...

设计带有placeHolder的TextView

设计带有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:@"\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

需要注意的一些细节:

设计带有placeHolder的TextView