#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"提供了一个实现这种功能的解决方案,它使用了懒加载思想,增强了`TextView`的功能,使其更易于扩展和自定义,特别适用于构建类似意见反馈页面。 首先,我们来详细了解...
`ios-带有placeholder的textview.zip`中的项目"YMTextView-master"就是这样一个自定义的解决方案,它扩展了`UITextView`的功能,允许我们设置占位符文本和其字体大小。 `YMTextView`的核心概念是利用`...
- "ios-一个带有placeholder的可视化textview.zip"中的`placeholderTextView`文件可能包含了一个自定义的`UITextView`子类,以及对应的XIB或Storyboard文件,使得开发者可以直接在设计界面中看到placeholder的效果...
在这个项目"ios-带有placeholder的TextView和跟随键盘移动的textfield.zip"中,开发者`fengzhihao123`分享了一个实现自定义功能的例子,主要关注了`UITextField`的placeholder显示和`UITextView`的键盘适配。...
总结一下,这个知识点主要是关于如何在iOS应用中创建一个带有placeholder功能的自定义`UITextView`,通过自定义视图和事件监听来实现这一功能,提高了用户体验。在实际项目中,这种自定义控件的创建不仅可以满足特定...
2. **利用 attributedText**:利用`UITextView`的`attributedText`属性,可以设置带样式的文本,包括颜色、字体等。可以创建一个`NSAttributedString`对象来存储占位符文本,然后在`UITextView`没有内容时设置这个`...
总之,“ios-带placeholder的textView.zip”项目提供了自定义TextView的一个实例,对于初学者来说,这是一个了解如何扩展原生控件的好案例,同时也对有经验的开发者提供了一种实现特定功能的解决方案。通过学习这个...
本示例中的“swift-自定义的带有占位文字的textView”就是一个这样的自定义控件,它扩展了标准的`UITextView`,为用户提供了一个内置的占位文本功能,这在原生的`UITextView`中并不直接支持。 首先,我们来理解一下...
在iOS中,`UITextField`有一个内置的`placeholder`属性,但`UITextView`没有提供这样的直接支持。因此,我们需要自定义一个`UITextView`子类,创建一个`placeholder`属性,并在其中绘制占位文字。 ```swift class ...
在这个名为“ios-带有占位符的TextView.zip”的项目中,开发者提供了一个增强版的 `TextView`,它包含了占位符(placeholder)功能,用户可以对占位符的颜色和其他属性进行自定义,使其更加符合应用的设计需求和用户...
JJTextView是一个针对这种情况的自定义控件,它提供了一种简洁的方式,仅通过一句代码就能实现带有占位文字和字数统计功能的TextView,并且保证了内存的安全性。下面我们将深入探讨JJTextView的核心特点、实现原理...
总的来说,这个案例提供了一种自定义`UITextView`以实现占位符的方法,这对于那些希望在`UITextView`中使用占位符效果的iOS开发者来说是非常有价值的。通过深入研究源码,我们可以了解到自定义UI组件的技巧,以及...
`UITextView`可以设置允许编辑,因此它可以替代`UITextField`来实现带有自动换行功能的文本输入。 首先,我们要在Xcode中创建一个`UITextView`实例,并设置其属性。这包括设置`isEditable`为`true`以便用户输入,...
7. **富文本支持**:`UITextView`支持`NSAttributedString`,可以创建带有格式的文本,如加粗、斜体、下划线等。 另一方面,`UIWebView`是一个可以加载HTML、CSS和JavaScript的视图,常用于在iOS应用内嵌入网页内容...
`JKTextView`是一个由JoanKing开发的`GitHub`仓库,其主要目标就是提供一个带有`placeholder`和字符限制功能的自定义`TextView`。这个库的核心类`JKTextView`扩展了`UITextView`,添加了`placeholder`属性和`...
在标准的UITextView中,虽然可以实现类似的功能,但实现过程较为复杂,而"WYPTextView"则为开发者提供了一个简洁的解决方案。 在Objective-C中,我们可以创建一个继承自UITextView的子类,然后添加占位符属性和相关...
`AZXTextViewWithPlaceholder`是一个Objective-C编写的简单控件,它扩展了原生的`UITextView`,为开发者提供了自定义占位符(placeholder)的功能。下面我们将深入探讨这个控件的核心特性及其实现方式。 1. **...