@interface SSTextView : UITextView {
BOOL _shouldDrawPlaceholder;
}
/**
The string that is displayed when there is no other text in the text view.
The default value is `nil`.
*/
@property (nonatomic) NSString *placeholder;
/**
The color of the placeholder.
The default is `[UIColor lightGrayColor]`.
*/
@property (nonatomic) UIColor *placeholderColor;
@end
#import "SSTextView.h"
@interfaceSSTextView ()
- (void)_initialize;
- (void)_updateShouldDrawPlaceholder;
- (void)_textChanged:(NSNotification *)notification;
@end
@implementation SSTextView
#pragma mark - Accessors
@synthesize placeholder = _placeholder;
@synthesize placeholderColor = _placeholderColor;
- (void)setText:(NSString *)string {
[super setText:string];
[self_updateShouldDrawPlaceholder];
}
- (void)setPlaceholder:(NSString *)string {
if ([string isEqual:_placeholder]) {
return;
}
_placeholder = string;
[self_updateShouldDrawPlaceholder];
}
#pragma mark - NSObject
- (void)dealloc {
[[NSNotificationCenterdefaultCenter] removeObserver:selfname:UITextViewTextDidChangeNotificationobject:self];
}
#pragma mark - UIView
- (id)initWithCoder:(NSCoder *)aDecoder {
if ((self = [super initWithCoder:aDecoder])) {
[self _initialize];
}
returnself;
}
- (id)initWithFrame:(CGRect)frame {
if ((self = [super initWithFrame:frame])) {
[self _initialize];
}
returnself;
}
- (void)drawRect:(CGRect)rect {
[super drawRect:rect];
- (void)drawRect:(CGRect)rect {
[super drawRect:rect];
if (_shouldDrawPlaceholder) {
[_placeholderColorset];
[_placeholderdrawInRect:CGRectMake(8.0f, 5.0f, self.frame.size.width - 16.0f, self.frame.size.height - 16.0f) withAttributes:[NSDictionarydictionaryWithObject:self.placeholderColorforKey:NSForegroundColorAttributeName]];
}
}
}
#pragma mark - Private
- (void)_initialize {
[[NSNotificationCenterdefaultCenter] addObserver:selfselector:@selector(_textChanged:) name:UITextViewTextDidChangeNotificationobject:self];
self.placeholderColor = [UIColorcolorWithWhite:0.702falpha:1.0f];
_shouldDrawPlaceholder = NO;
}
- (void)_updateShouldDrawPlaceholder {
BOOL prev = _shouldDrawPlaceholder;
_shouldDrawPlaceholder = self.placeholder && self.placeholderColor && self.text.length == 0;
if (prev != _shouldDrawPlaceholder) {
[selfsetNeedsDisplay];
}
}
- (void)_textChanged:(NSNotification *)notificaiton {
[self_updateShouldDrawPlaceholder];
}
@end
相关推荐
`ios-TextView~Placeholder.zip`这个压缩包很可能包含了一个示例项目或代码片段,展示了如何为`UITextView`添加自定义的`placeholder`功能。 首先,我们来理解一下`placeholder`的概念。在用户界面设计中,占位符文...
- `CustomTextView` 添加了一个`UILabel` 来展示`placeholder`,这个`UILabel`通常会设置成半透明的颜色,以便在`TextView`空白时显示提示信息。 - 当`TextView`的文本内容为空时,`placeholder`显示;当用户开始...
标题"TextView增加placeHolder"所指的就是如何在TextView中添加一个类似占位符的功能。这通常是通过以下两种方式实现的: 1. **继承TextView**: 创建一个新的自定义View类,继承自TextView,并在其中添加占位符的...
在这个封装中,`TextView`被赋予了`placeholder`属性,用户可以设置提示文本,帮助用户了解输入框的预期输入内容。 3. **修改placeholder颜色**: - 在iOS的`UITextField`中,placeholder的颜色是可以自定义的,这...
当需要为`UITextView`添加类似于`UITextField`的占位符(placeholder)功能时,因为原生的`UITextView`并未提供直接的支持,开发者需要自定义实现。`ios-带有placeholder的textview.zip`中的项目"YMTextView-master...
扩展TextView添加placeholder和maxInputLenth属性,将扩展文件导入即可使用对代码无污染 原理介绍:http://www.jianshu.com/p/b61cf49c1e24 github:...
在`PlaceholderTextView`中,我们可以定义一个`placeholder`属性,以及对应的`placeholderColor`属性,允许开发者设置占位符的颜色。这样,用户在初始化`PlaceholderTextView`时,可以像设置`UITextField`一样,通过...
在实际应用中,我们经常需要为TextView添加placeholder,就像文本框(TextField)那样,来提示用户输入信息。"ios-一个带有placeholder的可视化textview.zip"这个资源提供了一个实现TextView placeholder功能的示例...
在压缩包中的`placeholderTextView`文件,很可能是自定义的`UITextView`子类,它添加了`placeholder`属性并实现了相关的显示逻辑。 懒加载(Lazy Loading)是一种优化技术,主要用在资源加载上,目的是推迟非关键...
本资源"IOS应用源码之自动为textView添加编辑框.zip"提供了一种方法,帮助开发者自动为`textView`添加编辑框,提升用户交互体验。下面我们将深入探讨这一主题。 首先,`textView`是`UIKit`框架中的一个控件,全称为...
本项目“ios-带placeholder的textView.zip”显然关注的是如何为TextView添加占位符(Placeholder)功能,这是iOS原生TextView所不直接支持的。通过分析提供的文件名CustomTextVeiw.h和CustomTextVeiw.m,我们可以...
我们可以为TextView添加一个方法来监测输入字数,一旦超过设定值,就阻止进一步输入。例如: 1. 定义一个属性来存储最大字数限制,如`@property (nonatomic, assign) NSInteger maxCharacterCount;` 2. 添加一个...
要为`TextView`添加`placeholder`,可以创建一个自定义的`UIView`子类,继承自`UITextView`,并添加一个新的属性来存储`placeholder`文字。然后,在`drawRect:`方法中根据`TextView`的文本内容是否为空,决定是否...
首先创建一个名为 `UITextView+PlaceHolder` 的Category,然后在这个Category中添加一个属性 `placeholder` 和相关的方法。 ```objc // UITextView+PlaceHolder.h #import @interface UITextView (PlaceHolder) ...
`TextView` 的 `placeHolder` 概念可能让人联想到HTML中的占位符,但在Android中,它并不直接对应一个特定的属性。不过,我们可以用一些技巧来实现类似的功能,即在 `TextView` 没有设定内容时显示一段提示文字,当...
这个压缩包“IOS应用源码——自动为textView添加编辑框.rar”提供了一个解决方案,它可以帮助开发者为textView自定义一个编辑框,提升用户在输入文字时的交互体验。让我们深入探讨一下这个源码实现的关键知识点。 ...
在这个名为“ios-带有占位符的TextView.zip”的项目中,开发者提供了一个增强版的 `TextView`,它包含了占位符(placeholder)功能,用户可以对占位符的颜色和其他属性进行自定义,使其更加符合应用的设计需求和用户...
- 添加一个专门的placeholder属性,用于设置和获取placeholder文本。 - 创建一个内部UILabel用于显示placeholder,根据文本内容的有无调整其显示和隐藏。 - 考虑到布局和样式,确保placeholder的样式与系统的...
"A missing placeholder for UITextView" 这个开源项目就是为了解决这个问题,它为 `UITextView` 添加了缺失的占位符支持。 该项目的核心在于创建了一个自定义的 `UITextView` 子类,可能被命名为 `...