`

UITextView 带有PlaceHolder

阅读更多
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>

@interface UIPlaceHolderTextView : UITextView

@property (nonatomic, retain) NSString *placeholder;
@property (nonatomic, retain) UIColor *placeholderColor;

-(void)textChanged:(NSNotification*)notification;

@end

 

 

#import "UIPlaceHolderTextView.h"

@interface UIPlaceHolderTextView ()

@property (nonatomic, retain) UILabel *placeHolderLabel;

@end

@implementation UIPlaceHolderTextView

- (void)dealloc
{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
#if __has_feature(objc_arc)
#else
    [_placeHolderLabel release]; _placeHolderLabel = nil;
    [_placeholderColor release]; _placeholderColor = nil;
    [_placeholder release]; _placeholder = nil;
    [super dealloc];
#endif
}

- (void)awakeFromNib
{
    [super awakeFromNib];
    
    // Use Interface Builder User Defined Runtime Attributes to set
    // placeholder and placeholderColor in Interface Builder.
    if (!self.placeholder) {
        [self setPlaceholder:@""];
    }
    
    if (!self.placeholderColor) {
        [self setPlaceholderColor:[UIColor lightGrayColor]];
    }
    
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textChanged:) name:UITextViewTextDidChangeNotification object:nil];
}

- (id)initWithFrame:(CGRect)frame
{
    if( (self = [super initWithFrame:frame]) )
    {
        [self setPlaceholder:@""];
        [self setPlaceholderColor:[UIColor lightGrayColor]];
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textChanged:) name:UITextViewTextDidChangeNotification object:nil];
    }
    return self;
}

- (void)textChanged:(NSNotification *)notification
{
    if([[self placeholder] length] == 0)
    {
        return;
    }
    
    if([[self text] length] == 0)
    {
        [[self viewWithTag:999] setAlpha:1];
    }
    else
    {
        [[self viewWithTag:999] setAlpha:0];
    }
}

- (void)setText:(NSString *)text {
    [super setText:text];
    [self textChanged:nil];
}

- (void)drawRect:(CGRect)rect
{
    if( [[self placeholder] length] > 0 )
    {
        if (_placeHolderLabel == nil )
        {
            _placeHolderLabel = [[UILabel alloc] initWithFrame:CGRectMake(8,8,self.bounds.size.width - 16,0)];
            _placeHolderLabel.lineBreakMode = NSLineBreakByWordWrapping;
            _placeHolderLabel.numberOfLines = 0;
            _placeHolderLabel.font = self.font;
            _placeHolderLabel.backgroundColor = [UIColor clearColor];
            _placeHolderLabel.textColor = self.placeholderColor;
            _placeHolderLabel.alpha = 0;
            _placeHolderLabel.tag = 999;
            [self addSubview:_placeHolderLabel];
        }
        
        _placeHolderLabel.text = self.placeholder;
        [_placeHolderLabel sizeToFit];
        [self sendSubviewToBack:_placeHolderLabel];
    }
    
    if( [[self text] length] == 0 && [[self placeholder] length] > 0 )
    {
        [[self viewWithTag:999] setAlpha:1];
    }
    
    [super drawRect:rect];
}

@end

 

分享到:
评论

相关推荐

    ios-带有placeholder的TextView.zip

    本项目"ios-带有placeholder的TextView.zip"提供了一个实现这种功能的解决方案,它使用了懒加载思想,增强了`TextView`的功能,使其更易于扩展和自定义,特别适用于构建类似意见反馈页面。 首先,我们来详细了解...

    ios-带有placeholder的textview.zip

    `ios-带有placeholder的textview.zip`中的项目"YMTextView-master"就是这样一个自定义的解决方案,它扩展了`UITextView`的功能,允许我们设置占位符文本和其字体大小。 `YMTextView`的核心概念是利用`...

    ios-一个带有placeholder 的可视化textview.zip

    - "ios-一个带有placeholder的可视化textview.zip"中的`placeholderTextView`文件可能包含了一个自定义的`UITextView`子类,以及对应的XIB或Storyboard文件,使得开发者可以直接在设计界面中看到placeholder的效果...

    ios-带有placeholder的TextView和跟随键盘移动的textfield.zip

    在这个项目"ios-带有placeholder的TextView和跟随键盘移动的textfield.zip"中,开发者`fengzhihao123`分享了一个实现自定义功能的例子,主要关注了`UITextField`的placeholder显示和`UITextView`的键盘适配。...

    iOS可以显示placeholder的TextView

    总结一下,这个知识点主要是关于如何在iOS应用中创建一个带有placeholder功能的自定义`UITextView`,通过自定义视图和事件监听来实现这一功能,提高了用户体验。在实际项目中,这种自定义控件的创建不仅可以满足特定...

    ios-TextView~Placeholder.zip

    2. **利用 attributedText**:利用`UITextView`的`attributedText`属性,可以设置带样式的文本,包括颜色、字体等。可以创建一个`NSAttributedString`对象来存储占位符文本,然后在`UITextView`没有内容时设置这个`...

    ios-带placeholder的textView.zip

    总之,“ios-带placeholder的textView.zip”项目提供了自定义TextView的一个实例,对于初学者来说,这是一个了解如何扩展原生控件的好案例,同时也对有经验的开发者提供了一种实现特定功能的解决方案。通过学习这个...

    swift-自定义的带有占位文字的textView

    本示例中的“swift-自定义的带有占位文字的textView”就是一个这样的自定义控件,它扩展了标准的`UITextView`,为用户提供了一个内置的占位文本功能,这在原生的`UITextView`中并不直接支持。 首先,我们来理解一下...

    swift-带有占位文字的textView能够限制文字输入编译版本为swift3.0

    在iOS中,`UITextField`有一个内置的`placeholder`属性,但`UITextView`没有提供这样的直接支持。因此,我们需要自定义一个`UITextView`子类,创建一个`placeholder`属性,并在其中绘制占位文字。 ```swift class ...

    ios-带有占位符的TextView.zip

    在这个名为“ios-带有占位符的TextView.zip”的项目中,开发者提供了一个增强版的 `TextView`,它包含了占位符(placeholder)功能,用户可以对占位符的颜色和其他属性进行自定义,使其更加符合应用的设计需求和用户...

    swift-JJTextView一句代码带占位文字和字数统计的textView原生内存安全.

    JJTextView是一个针对这种情况的自定义控件,它提供了一种简洁的方式,仅通过一句代码就能实现带有占位文字和字数统计功能的TextView,并且保证了内存的安全性。下面我们将深入探讨JJTextView的核心特点、实现原理...

    在文本视图和文本域中添加占位符效果

    总的来说,这个案例提供了一种自定义`UITextView`以实现占位符的方法,这对于那些希望在`UITextView`中使用占位符效果的iOS开发者来说是非常有价值的。通过深入研究源码,我们可以了解到自定义UI组件的技巧,以及...

    ios-自动换行的textField.zip

    `UITextView`可以设置允许编辑,因此它可以替代`UITextField`来实现带有自动换行功能的文本输入。 首先,我们要在Xcode中创建一个`UITextView`实例,并设置其属性。这包括设置`isEditable`为`true`以便用户输入,...

    IOS-UI控件

    7. **富文本支持**:`UITextView`支持`NSAttributedString`,可以创建带有格式的文本,如加粗、斜体、下划线等。 另一方面,`UIWebView`是一个可以加载HTML、CSS和JavaScript的视图,常用于在iOS应用内嵌入网页内容...

    TextView添加提示语以及限制字符 iOS

    `JKTextView`是一个由JoanKing开发的`GitHub`仓库,其主要目标就是提供一个带有`placeholder`和字符限制功能的自定义`TextView`。这个库的核心类`JKTextView`扩展了`UITextView`,添加了`placeholder`属性和`...

    WYPTextView:带有占位符的简单文本视图

    在标准的UITextView中,虽然可以实现类似的功能,但实现过程较为复杂,而"WYPTextView"则为开发者提供了一个简洁的解决方案。 在Objective-C中,我们可以创建一个继承自UITextView的子类,然后添加占位符属性和相关...

    AZXTextViewWithPlaceholder:带占位符的 TextView 控件

    `AZXTextViewWithPlaceholder`是一个Objective-C编写的简单控件,它扩展了原生的`UITextView`,为开发者提供了自定义占位符(placeholder)的功能。下面我们将深入探讨这个控件的核心特性及其实现方式。 1. **...

Global site tag (gtag.js) - Google Analytics