iOS中用UILabel实现UITextView的占位文字

@interface BSPublishTextView : UITextView

/** 对外属性占位字符 placeholder */

@property (nonatomic, copy) NSString *placeholder;

/** 对外属性占位符颜色 */

@property (nonatomic, strong) UIColor *placeholderColor;

@end

@interface BSPublishTextView ()

/** 占位字符 label */

@property (nonatomic, weak) UILabel *placeholderLabel;

@end

@implementation BSPublishTextView

- (UILabel *)placeholderLabel{

if (!_placeholderLabel) {

UILabel *placeholderLabel = [[UILabel alloc]init];

placeholderLabel.backgroundColor = [UIColor greenColor];

placeholderLabel.numberOfLines = 0;

placeholderLabel.x = 4;

placeholderLabel.y = 7;

[self addSubview:placeholderLabel];

_placeholderLabel = placeholderLabel;

}

return _placeholderLabel;

}

- (instancetype)initWithFrame:(CGRect)frame

{

self = [super initWithFrame:frame];

if (self) {

// 永久垂直有弹簧效果

self.alwaysBounceVertical = YES;

self.font = [UIFont systemFontOfSize:15];

self.placeholderColor = [UIColor grayColor];

// 注册通知 当收到 UITextViewTextDidChangeNotification  textView文字改变时

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

}

return self;

}

//通知调用方法

- (void)textChange{

self.placeholderLabel.hidden = self.hasText;

}

- (void)dealloc{

[[NSNotificationCenter defaultCenter]removeObserver:self];

}

- (void)layoutSubviews{

[super layoutSubviews];

//在 layoutSubviews 拿到 UITextView的宽度一定是正确的 ,这里如果外界即使更改了UITextView的宽度这里也是能算正确的

//先设置placeholderLabel占位字符的宽度

self.placeholderLabel.width = self.width - 2 * self.placeholderLabel.x;

// placeholderLabel占位字符的大小size随里面的内容大小而变化

[self.placeholderLabel sizeToFit];

}

// setNeedsDisplay方法 : 会在恰当的时刻自动调用drawRect:方法

// setNeedsLayout方法 : 会在恰当的时刻调用layoutSubviews方法

- (void)setPlaceholderColor:(UIColor *)placeholderColor{

_placeholderColor = placeholderColor;

self.placeholderLabel.textColor = placeholderColor;

}

- (void)setPlaceholder:(NSString *)placeholder{

_placeholder = [placeholder copy];

self.placeholderLabel.text = placeholder;

[self setNeedsLayout]; //会在恰当的时刻调用layoutSubviews方法 这句代码可不写

}

- (void)setFont:(UIFont *)font{

[super setFont:font];

self.placeholderLabel.font = font;

[self setNeedsLayout];  //会在恰当的时刻调用layoutSubviews方法 这句代码可不写

}

- (void)setText:(NSString *)text{

[super setText:text];

[self textChange];

}

- (void)setAttributedText:(NSAttributedString *)attributedText{

[super setAttributedText:attributedText];

[self textChange];

}

@end

时间: 2024-11-08 23:26:32

iOS中用UILabel实现UITextView的占位文字的相关文章

iOS开发中设置UITextField的占位文字的颜色,和光标的颜色

在iOS开发中,对于很多初学者而言,很有可能碰到需要修改UITextField的占位文字的颜色,以及当UITextField成为第一响应者后光标的颜色,那么下面小编就介绍一下修改占位文字和光标的颜色.1:当你在使用Storyboard开发是,点击UITextField,在点击右上角的属性检测器,其实在这里面你是找不到有可以修改占位文字和光标颜色的属性的.2:那就进入UITextField的协议里面去查找,但是还是找不到,3:在进代理里面去查找,看看有没有通过代理方法,返回颜色并控制占位文字的方法

iOS中用UIWebView的loadHTMLString后图片和文字失调解决方法

iOS中用UIWebView的loadHTMLString后图片和文字失调,图片过大,超过屏幕,文字太小:或者图片太小,文字太大,总之就是不协调. 我们的需求是让图片的大小跟着屏幕的变化而变化,就是动态的去适应屏幕:那么文字的字体就是我们自己可以控制,可大可小.要想达到这样的效果,我们要在用loadHTMLString加载字符串之前对它进行处理.怎么处理呢?什么原理呢? 处理HTMLString的方法: NSString *htmls = [NSString stringWithFormat:@

iOS不得姐项目--登录模块的布局,设置文本框占位文字颜色,自定义内部控件竖直排列的按钮

一.登录模块的布局 将一整部分切割成若干部分来完成,如图分成了三部分来完成 设置顶部状态栏为白色的方法 二.设置文本框占位文字颜色 <1>方法一与方法二实现原理是同一种,都是通过设置placeholder的NSAttributeString来设置文字属性 方法二效果图: <2>第三种方法是通过RunTime找到隐藏的可以设置placeholder颜色的属性,通过KVC来赋值.RunTime会单独拿出来讲 三.按钮自定义,重新排列子控件的排列位置

iOS 设置带占位文字的TextView

原生TextView无占位文字, 可通过drawRect:方法为其添加占位文字, 具体设置如下: 1. 获取当前占位文字属性: // 文字属性 NSMutableDictionary *attrs = [NSMutableDictionary dictionary]; attrs[NSFontAttributeName] = self.font; // 获取当前PlaceholderTextView的文字属性 attrs[NSForegroundColorAttributeName] = sel

【转】UILabel、UITextView自适应得到高度

原文:http://blog.csdn.net/xcysuccess3/article/details/8331549 在iOS中,经常遇到需要根据字符串的内容动态指定UILabel,UITextView,UITableViewCell等的高度的情况,这个时候就需要动态的计算字符串内容的高度,下面是计算的方法: [cpp] view plaincopy /** @method 获取指定宽度情况ixa,字符串value的高度 @param value 待计算的字符串 @param fontSize

百思不得姐第4天:文本框占位文字颜色

一:设置登录界面和注册界面的切换 #import "CQLoginViewController.h" #import "CQCustomTextField.h" @interface CQLoginViewController () @property (weak, nonatomic) IBOutlet NSLayoutConstraint *centerTopConstraints; @property (weak, nonatomic) IBOutlet UI

IOS 为UILabel添加长按复制功能

IOS 为UILabel添加长按复制功能 在iOS中下面三个控件,自身就有复制-粘贴的功能: 1.UITextView 2.UITextField 3.UIWebView UIKit framework提供了几个类和协议方便我们在自己的应用程序中实现剪贴板的功能. 1.UIPasteboard:我们可以向其中写入数据,也可以读取数据 2.UIMenuController:显示一个快捷菜单,用来展示复制.剪贴.粘贴等选择的项. 3.UIResponder中的 canPerformAction:wi

文本编辑框光标颜色和占位文字颜色自定义

1.自定义一个自己的UITextField类,在类中实现如下代码: 方法一:利用UITextField属性attributedPlaceholder直接设置 -(void)awakeFromNib{ [super awakeFromNib]; //光标颜色 self.tintColor = [UIColor whiteColor]; //占位文字颜色 [self addTarget:self action:@selector(startEditTextField) forControlEvent

iOS开发系列之四 - UITextView 用法小结

// 初始化输入框并设置位置和大小 UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(10, 10, 300, 180)]; // 设置预设文本 textView.text = @""; // 设置文本字体 textView.font = [UIFont fontWithName:@"Arial" size:16.5f]; // 设置文本颜色 textView.textColor