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

相关文章

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

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

Rsnapshot怎么用? 基于Rsync的强大Linux备份工具使用指南

《Rsnapshot怎么用?基于Rsync的强大Linux备份工具使用指南》Rsnapshot不仅可以备份本地文件,还能通过SSH备份远程文件,接下来详细介绍如何安装、配置和使用Rsnaps... Rsnapshot 是一款开源的文件系统快照工具。它结合了 Rsync 和 SSH 的能力,可以帮助你在 li

电脑密码怎么设置? 一文读懂电脑密码的详细指南

《电脑密码怎么设置?一文读懂电脑密码的详细指南》为了保护个人隐私和数据安全,设置电脑密码显得尤为重要,那么,如何在电脑上设置密码呢?详细请看下文介绍... 设置电脑密码是保护个人隐私、数据安全以及系统安全的重要措施,下面以Windows 11系统为例,跟大家分享一下设置电脑密码的具体办php法。Windo

怎么关闭Ubuntu无人值守升级? Ubuntu禁止自动更新的技巧

《怎么关闭Ubuntu无人值守升级?Ubuntu禁止自动更新的技巧》UbuntuLinux系统禁止自动更新的时候,提示“无人值守升级在关机期间,请不要关闭计算机进程”,该怎么解决这个问题?详细请看... 本教程教你如何处理无人值守的升级,即 Ubuntu linux 的自动系统更新。来源:https://

Ubuntu系统怎么安装Warp? 新一代AI 终端神器安装使用方法

《Ubuntu系统怎么安装Warp?新一代AI终端神器安装使用方法》Warp是一款使用Rust开发的现代化AI终端工具,该怎么再Ubuntu系统中安装使用呢?下面我们就来看看详细教程... Warp Terminal 是一款使用 Rust 开发的现代化「AI 终端」工具。最初它只支持 MACOS,但在 20

LinuxMint怎么安装? Linux Mint22下载安装图文教程

《LinuxMint怎么安装?LinuxMint22下载安装图文教程》LinuxMint22发布以后,有很多新功能,很多朋友想要下载并安装,该怎么操作呢?下面我们就来看看详细安装指南... linux Mint 是一款基于 Ubuntu 的流行发行版,凭借其现代、精致、易于使用的特性,深受小伙伴们所喜爱。对

macOS怎么轻松更换App图标? Mac电脑图标更换指南

《macOS怎么轻松更换App图标?Mac电脑图标更换指南》想要给你的Mac电脑按照自己的喜好来更换App图标?其实非常简单,只需要两步就能搞定,下面我来详细讲解一下... 虽然 MACOS 的个性化定制选项已经「缩水」,不如早期版本那么丰富,www.chinasem.cn但我们仍然可以按照自己的喜好来更换

Ubuntu 怎么启用 Universe 和 Multiverse 软件源?

《Ubuntu怎么启用Universe和Multiverse软件源?》在Ubuntu中,软件源是用于获取和安装软件的服务器,通过设置和管理软件源,您可以确保系统能够从可靠的来源获取最新的软件... Ubuntu 是一款广受认可且声誉良好的开源操作系统,允许用户通过其庞大的软件包来定制和增强计算体验。这些软件

Ubuntu 24.04 LTS怎么关闭 Ubuntu Pro 更新提示弹窗?

《Ubuntu24.04LTS怎么关闭UbuntuPro更新提示弹窗?》Ubuntu每次开机都会弹窗提示安全更新,设置里最多只能取消自动下载,自动更新,但无法做到直接让自动更新的弹窗不出现,... 如果你正在使用 Ubuntu 24.04 LTS,可能会注意到——在使用「软件更新器」或运行 APT 命令时,

TP-LINK/水星和hasivo交换机怎么选? 三款网管交换机系统功能对比

《TP-LINK/水星和hasivo交换机怎么选?三款网管交换机系统功能对比》今天选了三款都是”8+1″的2.5G网管交换机,分别是TP-LINK水星和hasivo交换机,该怎么选呢?这些交换机功... TP-LINK、水星和hasivo这三台交换机都是”8+1″的2.5G网管交换机,我手里的China编程has