问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

ios的uitextview怎么实现placehold

发布网友 发布时间:2022-05-06 15:11

我来回答

1个回答

热心网友 时间:2022-07-01 03:41

使用UITextView经常会需要用到placeholder, 可惜UITextView没有提供这个功能, 那就开始动手写吧~

首先在创建一个CustomTextView来继承UITextView:

@interface CustomTextView : UITextView

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

@end
加入两个property:
@property (nonatomic, retain) NSString *placeholder; //文字
@property (nonatomic, retain) UIColor *placeholderColor; //颜色
下一步就是具体实现了.m文件
先注册UITextViewTextDidChangeNotification来监听文字内容的改变, 初始化一些变量.

- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textChanged:)
name:UITextViewTextDidChangeNotification
object:nil];

self.autoresizesSubviews = NO;
self.placeholder = @"";
self.placeholderColor = [UIColor lightGrayColor];

}
return self;
}
然后就是最核心的部分, 重写- (void)drawRect:(CGRect)rect
先确定好placeholder的位置(ios7中文字的位置和之前不一样, 所以placeholder也要对应调一下位置),设置好颜色,用NSString的drawInRect:绘制到TextView中.

- (void)drawRect:(CGRect)rect
{
//内容为空时才绘制placeholder
if ([self.text isEqualToString:@""]) {
CGRect placeholderRect;
placeholderRect.origin.y = 8;
placeholderRect.size.height = CGRectGetHeight(self.frame)-8;
if (IOS_VERSION >= 7) {
placeholderRect.origin.x = 5;
placeholderRect.size.width = CGRectGetWidth(self.frame)-5;
} else {
placeholderRect.origin.x = 10;
placeholderRect.size.width = CGRectGetWidth(self.frame)-10;
}
[self.placeholderColor set];
[self.placeholder drawInRect:placeholderRect
withFont:self.font
lineBreakMode:NSLineBreakByWordWrapping
alignment:NSTextAlignmentLeft];
}
}
但- (void)drawRect:(CGRect)rect在self绘制或大小位置改变的时候被调用,我们输入文字是不会被调用的. 所以要调用self的setNeedsDisplay来重新绘制self里面的内容(placeholder).

- (void)textChanged:(NSNotification *)not
{
[self setNeedsDisplay];
}

- (void)setText:(NSString *)text
{
[super setText:text];
[self setNeedsDisplay];
}
一个简单的,带placeholder的TextView就搞定了.如果需要给placeholder设置字体或别的属性, 可以按照上面的思路实现.
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...我想退掉一张办后从未用过的工商银行的牡丹灵通卡,应该怎么做呢?要... 今天办理了工商银行卡,顺带开通网银,要每年缴费10元,手机也要收费,很麻... Microsoft VBScript 运行时错误 (0x800A000D)类型不匹配: 'rsup' 关于VFP,谁知道这个为什么报操作符/操作数类型不匹配啊! 数据查询提示“数据类型不匹配” ...介绍《天下无贼》的歌曲说明:谁能告诉我阿 ? ...不起来叫什么名了·请弟兄姊妹帮帮忙·急需···里面的歌词是... ...你是千堆雪我是长街,怕日出一到彼此瓦解这句歌词的意思? 两个人合伙开一个室内设计工作室,都是男的,求一个响亮内涵的名字!高 ... 饥荒红薯怎么种植 ios的uitextview怎么实现placehold 微信帮别人辅助注册 有危险吗? 怎样控制placeholder的默认值的位置 微信辅助注册是违法吗? html placeholder怎么设置居右 placeholder什么意思 placeholder是什么意思 一般视频的长宽比是多少 辅助别人注册有什么风险吗 input 怎么设置placeholder 的位置 如何用格式工厂把视频长宽比变成1024*640? 推荐几个经典的场面宏大的3d动画(3d电影也行) 怎么才可以知道最详细的IP地址呢? 有没有查IP的网站可以根据IP地址具体到那个城市哪条街道以及户名? IP:125.85.32.61的具体位置是那里,要详细到单位,或街道 高手进!!!查IP要用什么手段才可以查到街道所在 怎样通过ip查所在街道076981804256 如何通过IP地址查询对应的具体位置,如某区某街道? 上海中级口译资格证的考点 在北京能考上海市高级口译吗? 怎么设置ios uitextfield placeholder 的位置颜色大小 怎么设置ios uitextfield placeholder 的位置颜色大小 为什么我的placeholder控件动态添加控件进去都没见到的? 微信上帮别人辅助注册有没有啥安全风险 ios button有placeholder的属性没 excel无法添加边框线的问题。 如何设置 sdwebimage 的 placeholderimage 的显示尺寸大小 帮别人辅助注册导致被封,现在我的微信解封了,那以后还会有事吗? media go上PSN显示Browser Placeholder怎么回事? placeholder="maths"是什么意思 html 搜索框位置CSS样式问题 一个手机号码能可以开通几个码? 员工的工作总结该怎么写,才会得到领导的认可并觉得眼前一亮呢? 一个手机号能登录几个了 一个人手机可以申请几个 同一个手机可以注册几个 一个手机号可以注册几个? 一个手机可以登入几个微信 如果微信没有实名认证,一个手机号能注册几个? 一个手机号同时可以注册几个