iOS中UITextView遇到的问题总结
来源:互联网 发布:透视变换算法 编辑:程序博客网 时间:2024/04/30 07:14
前言
由于iOS中的UITextField不支持文本换行,所以在有换行需求时,我们只好用UITextView。
以下是在使用UITextView时很容易遇到的一些问题。
问题一:UITextView显示边框
UITextView默认是没有边框颜色的,没有直接的属性来设置边框颜色。
可以使用layer属性来解决,代码如下:
- //设置边框宽度
- self.textView.layer.borderWidth = 1.0;
- //设置边框颜色
- self.textView.layer.borderColor = [UIColor grayColor].CGColor;
- //设置圆角
- self.textView.layer.cornerRadius = 5.0;
问题二:UITextView居中了,怎么居上?
实际上,UITextView的文本默认就是居上显示的,出现上面的情况很多都是因为在iOS7下使用了navigationController让scrollView自动适应屏幕造成的。(UITextView继承自UIScrollView)。
所以解决方案如以下代码:
- if ([self respondsToSelector:@selector(setAutomaticallyAdjustsScrollViewInsets:)]) {
- self.automaticallyAdjustsScrollViewInsets = NO;
- }
问题三:UITextView添加placeholder灰色提示文字
UITextView没有UITextField的placeholder属性来提示输入框信息,也没有其他属性或接口来设置。
有人在UITextView上覆盖个UILabel来显示placeholder信息,也是一种解决思路。
但是从写程序的角度来说,用继承UITextView来解决问题似乎更加合理些。
新建UIPlaceholderTextView类继承自UITextView。
代码如下:
UIPlaceholderTextView.h文件
- @interface UIPlaceholderTextView : UITextView
- @property(nonatomic, strong) NSString *placeholder; //灰色提示文字
- @end
UIPlaceholderTextView.m文件
- #import "UIPlaceholderTextView.h"
- @implementation UIPlaceholderTextView
- - (id)initWithFrame:(CGRect)frame {
- if ((self = [super initWithFrame:frame])) {
- [self awakeFromNib];
- }
- return self;
- }
- - (void)awakeFromNib {
- [self addObserver];
- }
- #pragma mark 注册通知
- - (void)addObserver {
- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textDidBeginEditing:) name:UITextViewTextDidBeginEditingNotification object:self];
- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textDidEndEditing:) name:UITextViewTextDidEndEditingNotification object:self];
- }
- #pragma mark 移除通知
- - (void)dealloc {
- [[NSNotificationCenter defaultCenter] removeObserver:self];
- }
- #pragma mark 开始编辑
- - (void)textDidBeginEditing:(NSNotification *)notification {
- if ([super.text isEqualToString:_placeholder]) {
- super.text = @"";
- [super setTextColor:[UIColor blackColor]];
- }
- }
- #pragma mark 结束编辑
- - (void)textDidEndEditing:(NSNotification *)notification {
- if (super.text.length == 0) {
- super.text = _placeholder;
- //如果文本框内是原本的提示文字,则显示灰色字体
- [super setTextColor:[UIColor lightGrayColor]];
- }
- }
- #pragma mark 重写setPlaceholder方法
- - (void)setPlaceholder:(NSString *)aPlaceholder {
- _placeholder = aPlaceholder;
- [self textDidEndEditing:nil];
- }
- #pragma mark 重写getText方法
- - (NSString *)text {
- NSString *text = [super text];
- if ([text isEqualToString:_placeholder]) {
- return @"";
- }
- return text;
- }
- @end
在使用UIPlaceholderTextView的控制器的viewDidLoad方法里添加如下代码
- self.placeHolderTextView.placeholder=@"这一刻你想说什么......";
效果如下:
0 0
- iOS中UITextView遇到的问题总结
- iOS中UITextView遇到的问题总结
- iOS中UITextView遇到的问题总结
- ios-UITextView和UILabel遇到的问题
- IOS开发中遇到的问题总结
- ios编程中遇到的内存漏泄问题的总结
- 百度地图ios api使用中遇到的问题总结
- iOS开发过程中遇到的问题总结
- iOS开发中遇到的一些问题以及解决办法总结
- ios 开发中遇到的问题总结以及解决方法
- iOS开发过程中遇到的问题总结
- ios 开发中遇到的问题总结以及解决方法
- iOS 遇到问题总结
- iOS 使用ASIHTTPRequest 遇到的问题总结
- IOS IAP 遇到问题的总结
- [iOS]AFNetworking使用遇到的问题总结
- 【iOS】UITextView 自动跳动的问题
- ios开发中遇到的错误总结
- 模拟器定位帖子
- linux发行版的分析比较
- apache mina
- golang语法总结(十七):函数
- ContentProvider实现数据共享 查询手机内置联系人
- iOS中UITextView遇到的问题总结
- windows和linux下等待线程的退出
- htm、html、shtm、shtml的区别与联系
- 集训队专题(6)1005 Uncle Tom's Inherited Land*
- linux下载文件命令wget
- java中Double类型数据保留两位(非四舍五入)
- kbhit() 检查当前是否有键盘输入,若有则返回一个非0值,否则返回0
- 公有继承或者公有多继承是可以用::符号
- C++学习笔记:数组的操作符重载(包括[]和=运算符)