对象-自定义textView的placeHolder被拉伸怎么办

问题描述

自定义textView的placeHolder被拉伸怎么办

自定义textVIew的placeHolder(灰色文字部分)用quartz2D绘制
我监听键盘的高度 然后在监听方法里面改变textView高度 键盘弹出 textView的高度变小 键盘收回 高度变大
但是,键盘收缩,placeHolder的文字,会被短时间拉伸压缩 然后恢复正常 怎么办?

 textView.m
 -(void)setPlaceHolder:(NSString *)placeHolder{
    _placeHolder=placeHolder;
    self.change=YES;
    [self setNeedsDisplay];
}

- (void)drawRect:(CGRect)rect {

    //设置textView代理
    self.delegate=self;
    self.backgroundColor=[UIColor whiteColor];
    //判断输入内容
    NSString *str;
    if ((self.isChange==YES)&&(self.isClean==NO)) {
        str=self.placeHolder;
        //NSLog(@"1");
    }

    if ((self.isChange==NO)&&(self.isClean==NO)) {
        str=@"请输入内容";
        //NSLog(@"2");
    }

    if (self.isClean==YES) {
        //NSLog(@"3");
        str=@"";
    }

    //绘制画文字
    NSMutableDictionary *attrs = [NSMutableDictionary dictionary];
    // NSForegroundColorAttributeName : 文字颜色
    // NSFontAttributeName : 字体
    attrs[NSForegroundColorAttributeName] = [UIColor grayColor];
    if (self.fontSize) {
        attrs[NSFontAttributeName] = [UIFont systemFontOfSize:self.fontSize];
    }else{
        attrs[NSFontAttributeName] = [UIFont systemFontOfSize:14];
    }
    [str drawAtPoint:CGPointMake(5, 8) withAttributes:attrs];
}

#pragma mark - 监控textView开始
-(void)textViewDidChange:(UITextView *)textView{
    //NSLog(@"4");
    self.clean=YES;
    if (self.text.length==0) {
        self.clean=NO;
    }
    [self setNeedsDisplay];
}

- (void)textViewDidBeginEditing:(UITextView *)textView{
    //清空placeholder
   // NSLog(@"5");
    self.clean=YES;
    if (self.text.length==0) {
        self.clean=NO;
    }
    [self setNeedsDisplay];

}

#pragma mark - 监控textView结束
-(void)textViewDidEndEditing:(UITextView *)textView{

    if (self.text.length==0) {
        //NSLog(@"6");
        self.clean=NO;
    }
    [self setNeedsDisplay];

}

//controller.m

 - (void)viewDidLoad {
    [super viewDidLoad];
    self.placeHolderTextView.delegate=self;
    //隐藏tabbar
    self.tabBarController.tabBar.hidden=YES;

    //创建textView
    self.placeHolderTextView=[[IWTextView alloc]init];
    CGFloat textViewX=0;
    CGFloat textViewY=CGRectGetMaxY(self.timeLabel.frame);
    CGFloat textViewW=self.view.bounds.size.width;
    CGFloat textViewH=self.view.bounds.size.height-textViewY;
    self.placeHolderTextView.frame=CGRectMake(textViewX,textViewY, textViewW, textViewH);

    //添加进父类
    [self.view addSubview:self.placeHolderTextView];

    //设置placeHolder
    self.placeHolderTextView.placeholder=@"请输入备忘事项";

    //监听键盘的通知
   [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(KeyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];

//    MemoModel *model=[[MemoModel alloc]init];
//    model.title=self.placeHolderTextView.text;
//    model.date=self.timeLabel.text;
//    NSLog(@"123");
}

-(void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:YES];
    //键盘弹出
    [self.placeHolderTextView becomeFirstResponder];

}

#pragma mark - 键盘frame
- (void)KeyboardWillShow:(NSNotification *)notification
{
    //获取键盘frame
    CGRect keyboardFrame=[notification.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];

    //设置textView的frame
    CGRect textViewFrame=self.placeHolderTextView.frame;
    textViewFrame.size.height=CGRectGetMinY(keyboardFrame)-CGRectGetMaxY(self.timeLabel.frame);
    self.placeHolderTextView.frame=textViewFrame;
    NSLog(@"small%@",NSStringFromCGRect(self.placeHolderTextView.frame));

}

- (IBAction)FinishAction:(UIBarButtonItem *)sender {
    //键盘退出
    [self.view endEditing:YES];

}

- (void)dealloc
{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

解决方案

http://www.zhihu.com/question/36596148

时间: 2024-10-26 17:56:35

对象-自定义textView的placeHolder被拉伸怎么办的相关文章

android如何自定义TextView详解

Android控件中的TextView控件只有一个输入框,但是为了用于的操作方便我们应该实现一些功能: 1. 可以直接将内容删除的功能按钮 2. 可以记录用户以前输入的数据,同时能够将数据通过下拉显示,点击的时候实现输入 先上图: 下拉的图片没有做,所以和删除的图片使用同一个了,同志们可以直接在xml文件中更换就行了 分析: 肯定要使用自定义view来实现的,我们知道自定义view大概可以分为三类:自绘控件,组合控件,继承控件,我们这里是要进行增强的textView的功能,所以我这里使用的 是组

自定义view-Android 自定义Textview

问题描述 Android 自定义Textview 就是实现这个类似进度条的Textview.谁有好的思路 或者代码的吗? 解决方案 下面是个seekbar 或者 porgressbar 上面再显示文字就好了 解决方案二: 使用TextView 和 ImageView就行,ImageView设置深的颜色和透明度覆盖TextView,动态改变ImageView的宽度就可以实现该效果了 解决方案三: 安卓巴士很多类似的源码,你可以下载参考下呀,www.apkbus.com 解决方案四: 有没有用自定义

android自定义textview怎么显示字体库图标

问题描述 android自定义textview怎么显示字体库图标 androd自定义textview怎么显示字体库图标,就是iconfont各位帮帮忙 解决方案 请参考 这篇文章http://blog.csdn.net/u013401219/article/details/46427503

textview-android 拖动自定义TextView的边框实现文字的自适应宽高,在同一个布局的其他TextView 回到了初始位置

问题描述 android 拖动自定义TextView的边框实现文字的自适应宽高,在同一个布局的其他TextView 回到了初始位置 demo 下载地址: http://pan.baidu.com/s/1i3HF43b 拖动其中一个TextView改变位置,再点击另一个TextVeiw的任何一个边框,那么问题来了,上一个TextVeiw 回到了原来的位置,问题的根源在 ZoomTextView.java 的252行 调用的函数引起的 demo 下载地址: http://pan.baidu.com/

Android自定义TextView实现文字倾斜效果_Android

前言 由于Android自带的TextView控件没有提供倾斜的(我暂时没有找到),我们可以自定义控件来实现,下面首先来看我们实现的效果图. TextView文字倾斜 其实实现很简单,下面我们来看实现步骤: 1.新建一个类 LeanTextView继承TextView public class LeanTextView extends TextView { public int getmDegrees() { return mDegrees; } public void setmDegrees(

Android 让自定义TextView的drawableLeft与文本一起居中_Android

前言   TextView的drawableLeft.drawableRight和drawableTop是一个常用.好用的属性,可以在文本的上下左右放置一个图片,而不使用更加复杂布局就能达到,我也常常喜欢用RadioButton的这几个属性实现很多效果,但是苦于不支持让drawbleLeft与文本一起居中,设置gravity为center也无济于事,终于有空研究了一下,这里与大家一起分享. 正文  一.效果图  二.实现代码  自定义控件 /** * drawableLeft与文本一起居中显示

Android开发自定义TextView省略号样式的方法

本文实例讲述了Android开发自定义TextView省略号样式的方法.分享给大家供大家参考,具体如下: 在布局xml中设置textView的字段 android:maxLines="2"  android:ellipsize="end"字段之后,textview会自动压缩行数,并且对压缩掉的部分用...显示.如果不想用...而想用...或者... ...就需要自定义这个省略号的样式,不需要自定义控件,方法如下. 首先是布局文件 <TextView andro

Android自定义TextView实现drawableLeft内容居中

如何实现使用TextView的DrawableLeft使图片和文字居中显示呢??? 代码如下: 1.首先自定义一个类,继承TextView package com.test.signcalendar.weight; import android.content.Context; import android.graphics.Canvas; import android.graphics.drawable.Drawable; import android.util.AttributeSet; i

Android 自定义TextView实现文本内容自动调整字体大小

最近做通讯录小屏机 联系人姓名显示--长度超过边界字体变小 /** * 自定义TextView,文本内容自动调整字体大小以适应TextView的大小 * @author yzp */ public class AutoFitTextView extends TextView { private Paint mTextPaint; private float mTextSize; public AutoFitTextView(Context context) { super(context); }