iOS 设置带占位文字的TextView

原生TextView无占位文字, 可通过drawRect:方法为其添加占位文字, 具体设置如下:

1. 获取当前占位文字属性:

// 文字属性
NSMutableDictionary *attrs = [NSMutableDictionary dictionary];
attrs[NSFontAttributeName] = self.font; // 获取当前PlaceholderTextView的文字属性
attrs[NSForegroundColorAttributeName] = self.placeholderColor ? self.placeholderColor : [UIColor lightGrayColor];

2. 设置绘制范围(包含文字边距):

// 绘制范围
CGFloat placeholderTopMargin = self.placeholderTopMargin ? self.placeholderTopMargin : kPlaceholderDefaultTopMargin;
CGFloat placeholderLeftMargin = self.placeholderLeftMargin ? self.placeholderLeftMargin : kPlaceholderDefaultTopMargin;

CGFloat placeholderX = placeholderTopMargin;
CGFloat placeholderY = placeholderLeftMargin;
CGFloat placeholderW = rect.size.width - 2 * placeholderLeftMargin;
CGFloat placeholderH = rect.size.height - 2 * placeholderTopMargin;
CGRect placeholderRect = CGRectMake(placeholderX, placeholderY, placeholderW, placeholderH);

[self.placeholder drawInRect:placeholderRect withAttributes:attrs];

3. 通过通知或代理, 当TextView文字发生改变时, 重新绘制:

// 设置通知, 当TextView文字发生改变时, 向自己发送通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textDidChanged) name:UITextViewTextDidChangeNotification object:self];

通知事件:

- (void)textDidChanged
{
    // 重新绘制
    [self setNeedsDisplay];
}

4. 重写TextView属性方法, 实时绘制:

- (void)setPlaceholder:(NSString *)placeholder
{
    _placeholder = [placeholder copy];

    // 会在下一个消息循环调用drawRect
    [self setNeedsDisplay];
}
- (void)setPlaceholderColor:(UIColor *)placeholderColor
{
    _placeholderColor = placeholderColor;

    [self setNeedsDisplay];
}
- (void)setText:(NSString *)text
{
    [super setText:text]; // 系统自带属性

    [self setNeedsDisplay];
}
- (void)setAttributedText:(NSAttributedString *)attributedText
{
    [super setAttributedText:attributedText];

    [self setNeedsDisplay];
}
- (void)setFont:(UIFont *)font
{
    [super setFont:font];

    [self setNeedsDisplay];
}

GitHubs:https://github.com/BigPlane/CHPlaceholderTextView

时间: 2024-11-04 06:36:49

iOS 设置带占位文字的TextView的相关文章

ios设置UILabel中文字的不同颜色和字体字号

参考博客:http://blog.csdn.net/woaifen3344/article/details/38352099    http://www.cnblogs.com/whyandinside/archive/2013/12/27/3493475.html 要使UILabel显示不同的字体,需要设置其 attributedText属性 该属性是NSMutableAttributedString/NSAttributedString类型; NSAttributedString是一个带有属

IOS设置button 图片 文字 上下、左右

[btn setImage:imgNor forState:UIControlStateNormal]; [btn setImage:imgSel forState:UIControlStateSelected]; [btn setTitle:[arrLabel objectAtIndex:i] forState:UIControlStateNormal]; [btn setTitleColor:kCOLOR_TABBARNOR forState:UIControlStateNormal]; [

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

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

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

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

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

@interface BSPublishTextView : UITextView /** 对外属性占位字符 placeholder */ @property (nonatomic, copy) NSString *placeholder; /** 对外属性占位符颜色 */ @property (nonatomic, strong) UIColor *placeholderColor; @end @interface BSPublishTextView () /** 占位字符 label */

改变设置文本框占位文字和图片

如果我们想实现这种效果,点击相应的文本,占位文字显示高亮 ,而其他文本框非高亮 相应代码 #import <UIKit/UIKit.h> @interface XMGTextField : UITextField /** 颜色 */ @property(nonatomic,strong)UIColor *placeholderColor; @end #import "XMGTextField.h" #import <objc/runtime.h> static

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

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

iOS 修改toolbar里面文字的字体和大小

使用NSDictionaty来设置文本的属性: NSDictionary * attributes = @{NSFontAttributeName: [UIFont fontWithName:@"Heiti SC" size:20]}; [confirmBarButton setTitleTextAttributes:attributes forState:UIControlStateNormal]; 完整代码: self.inputToolbar = [[UIToolbar allo

Android自定义进度条-带文本(文字进度)的水平进度条(ProgressBar)

/** * 带文本提示的进度条 */ public class TextProgressBar extends ProgressBar { private String text; private Paint mPaint; public TextProgressBar(Context context) { super(context); initText(); } public TextProgressBar(Context context, AttributeSet attrs, int d