码迷,mamicode.com
首页 > 其他好文 > 详细

设计带有placeHolder的TextView

时间:2014-12-23 19:07:02      阅读:222      评论:0      收藏:0      [点我收藏+]

标签:

设计带有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

标签:

原文地址:http://www.cnblogs.com/YouXianMing/p/4180592.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!