iOS 怎么给UITextView添加占位符文字

2024-04-30 07:08

本文主要是介绍iOS 怎么给UITextView添加占位符文字,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

起初,方法是在cell.contentView上加一个label,在UITextView开始编辑时在代理方法里隐藏label,结束编辑时如果UITextView没文字,再把label显示出来。相比如下方法显得麻烦。

下面是通过runtime打印发现的UITextView里有占位符私有变量,可通过KVC直接设置一个占位符,相对简单,而且是可以发布通过的。


// 通过运行时,发现UITextView有一个叫做“_placeHolderLabel”的私有变量unsigned int count = 0;Ivar *ivars = class_copyIvarList([UITextView class], &count);for (int i = 0; i < count; i++) {Ivar ivar = ivars[i];const char *name = ivar_getName(ivar);NSString *objcName = [NSString stringWithUTF8String:name];NSLog(@"%d : %@",i,objcName);}


static NSString *questionCellID = @"questionCellID";UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:questionCellID];if (cell == nil) {cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:questionCellID];cell.selectionStyle = UITableViewCellSelectionStyleNone;UITextView *questionTV = [[UITextView alloc] initWithFrame:CGRectMake(15, 0, WID-30, 120)];questionTV.font = [UIFont systemFontOfSize:12];questionTV.textColor = [UIColor colorWithHexString:@"323232"];questionTV.tag = 70;[cell.contentView addSubview:questionTV];// _placeholderLabelUILabel *placeHolderLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, 12, CGRectGetWidth(questionTV.frame)-10, 14)];placeHolderLabel.text = @"请描述您的病史、家族史及想要咨询的主题";placeHolderLabel.numberOfLines = 0;placeHolderLabel.textColor = [UIColor colorWithHexString:@"9a9a9a"];placeHolderLabel.font = [UIFont systemFontOfSize:10];placeHolderLabel.tag = 90;[cell.contentView addSubview:placeHolderLabel];}UITextView *questionTV = (UITextView *)[cell.contentView viewWithTag:70];questionTV.delegate = self;questionTV.text = _question;UILabel *placeHolderLabel = (UILabel *)[cell.contentView viewWithTag:90];placeHolderLabel.hidden = (_question.length > 0 ? YES : NO);return cell;


补充:经测试,上面的用KVC设置私有变量的方法,在iOS8上会崩掉,查看runtime打印的变量名没有_placeholderLabel,所以,还是老老实实往cell上加一个label吧。

设置textView的代理,然后加下面的代码

#pragma mark - UITextViewDelegate
-(void)textViewDidChange:(UITextView *)textView
{_question = textView.text;UITableViewCell *cell = [_tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:4]];UILabel *placeHolderLabel = (UILabel *)[cell.contentView viewWithTag:90];if (textView.text.length == 0){placeHolderLabel.hidden = NO;}else{placeHolderLabel.hidden = YES;}
}




这篇关于iOS 怎么给UITextView添加占位符文字的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/948196

相关文章

qt5cored.dll报错怎么解决? 电脑qt5cored.dll文件丢失修复技巧

《qt5cored.dll报错怎么解决?电脑qt5cored.dll文件丢失修复技巧》在进行软件安装或运行程序时,有时会遇到由于找不到qt5core.dll,无法继续执行代码,这个问题可能是由于该文... 遇到qt5cored.dll文件错误时,可能会导致基于 Qt 开发的应用程序无法正常运行或启动。这种错

电脑提示xlstat4.dll丢失怎么修复? xlstat4.dll文件丢失处理办法

《电脑提示xlstat4.dll丢失怎么修复?xlstat4.dll文件丢失处理办法》长时间使用电脑,大家多少都会遇到类似dll文件丢失的情况,不过,解决这一问题其实并不复杂,下面我们就来看看xls... 在Windows操作系统中,xlstat4.dll是一个重要的动态链接库文件,通常用于支持各种应用程序

Python基于微信OCR引擎实现高效图片文字识别

《Python基于微信OCR引擎实现高效图片文字识别》这篇文章主要为大家详细介绍了一款基于微信OCR引擎的图片文字识别桌面应用开发全过程,可以实现从图片拖拽识别到文字提取,感兴趣的小伙伴可以跟随小编一... 目录一、项目概述1.1 开发背景1.2 技术选型1.3 核心优势二、功能详解2.1 核心功能模块2.

Mac备忘录怎么导出/备份和云同步? Mac备忘录使用技巧

《Mac备忘录怎么导出/备份和云同步?Mac备忘录使用技巧》备忘录作为iOS里简单而又不可或缺的一个系统应用,上手容易,可以满足我们日常生活中各种记录的需求,今天我们就来看看Mac备忘录的导出、... 「备忘录」是 MAC 上的一款常用应用,它可以帮助我们捕捉灵感、记录待办事项或保存重要信息。为了便于在不同

springboot+vue项目怎么解决跨域问题详解

《springboot+vue项目怎么解决跨域问题详解》:本文主要介绍springboot+vue项目怎么解决跨域问题的相关资料,包括前端代理、后端全局配置CORS、注解配置和Nginx反向代理,... 目录1. 前端代理(开发环境推荐)2. 后端全局配置 CORS(生产环境推荐)3. 后端注解配置(按接口

Android与iOS设备MAC地址生成原理及Java实现详解

《Android与iOS设备MAC地址生成原理及Java实现详解》在无线网络通信中,MAC(MediaAccessControl)地址是设备的唯一网络标识符,本文主要介绍了Android与iOS设备M... 目录引言1. MAC地址基础1.1 MAC地址的组成1.2 MAC地址的分类2. android与I

Flutter实现文字镂空效果的详细步骤

《Flutter实现文字镂空效果的详细步骤》:本文主要介绍如何使用Flutter实现文字镂空效果,包括创建基础应用结构、实现自定义绘制器、构建UI界面以及实现颜色选择按钮等步骤,并详细解析了混合模... 目录引言实现原理开始实现步骤1:创建基础应用结构步骤2:创建主屏幕步骤3:实现自定义绘制器步骤4:构建U

电脑死机无反应怎么强制重启? 一文读懂方法及注意事项

《电脑死机无反应怎么强制重启?一文读懂方法及注意事项》在日常使用电脑的过程中,我们难免会遇到电脑无法正常启动的情况,本文将详细介绍几种常见的电脑强制开机方法,并探讨在强制开机后应注意的事项,以及如何... 在日常生活和工作中,我们经常会遇到电脑突然无反应的情况,这时候强制重启就成了解决问题的“救命稻草”。那

电脑开机提示krpt.dll丢失怎么解决? krpt.dll文件缺失的多种解决办法

《电脑开机提示krpt.dll丢失怎么解决?krpt.dll文件缺失的多种解决办法》krpt.dll是Windows操作系统中的一个动态链接库文件,它对于系统的正常运行起着重要的作用,本文将详细介绍... 在使用 Windows 操作系统的过程中,用户有时会遇到各种错误提示,其中“找不到 krpt.dll”

MySql死锁怎么排查的方法实现

《MySql死锁怎么排查的方法实现》本文主要介绍了MySql死锁怎么排查的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录前言一、死锁排查方法1. 查看死锁日志方法 1:启用死锁日志输出方法 2:检查 mysql 错误