今天朋友问了一个关于textview的问题,我下午也用到了textview,接触的比较多,突然就萌生了写一下的想法,哈哈,第一次写,终于要跨出这一步了.
1.朋友给我发的图,输入文本居中,而不是从最上方开始?
如下图:
如果你查看一下UITextView的定义,你就会看到这样一行代码
NS_CLASS_AVAILABLE_IOS(2_0) @interface UITextView : UIScrollView <UITextInput>
由于textview是继承scrollview的,而iOS7增加了一个属性automaticallyAdjustsScrollViewInsets,会自动下压一个导航条的高度,所以我们需判断一下iOS版本并设置一下这个属性为NO不让它自动布局,添加以下代码
if ([[[UIDevice currentDevice]systemVersion]floatValue] >= 7.0) {
self.automaticallyAdjustsScrollViewInsets = NO;
}
2.placeholder水印占位字
当然textview是没有的,但可以通过代码实现大致效果,需要在textview的代理方法中实现
#pragma mark --textView delegate
-(void)textViewDidBeginEditing:(UITextView *)textView{
if ([textView.text isEqualToString:@"请在这里写"]) {
textView.text = nil;
textView.textColor = [UIColor lightGrayColor];
}
}
-(void)textViewDidEndEditing:(UITextView *)textView{
if ([textView.text isEqualToString:@""]) {
textView.text = @"请在这里写";
textView.textColor = [UIColor lightGrayColor];
return;
}
//保存,写在这里
_textStr = textView.text;
}
3.字数限制,也是代理方法
//宏定义最大字数
#define kWordLimit 200
-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{
NSString * str = textView.text;
/*
//这段可写可不写,以给用户提示下
if (str.length == kWordLimit) {
[SVProgressHUD showInfoWithStatus:@"亲,您已经写200字了哟!"];
}
*/
//根据字符串长度判断
if (str.length > kWordLimit) {
//字符串截取方法,用户输入字数达到限制后,无法再往里添加
textView.text = [textView.text substringToIndex:kWordLimit];
return NO;
}
return YES;
}
//这里主要是处理联想字
-(void)textViewDidChange:(UITextView *)textView{
if (textView.text.length > kWordLimit) {
textView.text = [textView.text substringToIndex:kWordLimit];
}
}
4.边框
textview默认是没有边框的颜色的,所以位置不明显,看着很别扭,我们一般都要设置一下,设置边框我常用的有两种方法:
一 是 使用layer的属性 二 是放张背景图
这两种方法,可以直接写在textview所在viewcontroller中,也可以自定义一个继承于UITextView的子类,在drawRect方法中实现,(代码类似,不分开写了)如下
- (void)drawRect:(CGRect)rect {
//方法一 图片
[[UIImage imageNamed:@"check"] drawInRect:rect blendMode:kCGBlendModeNormal alpha:0.8];
//方法二 layer
self.layer.borderColor = [UIColor yellowColor].CGColor;//边框颜色
self.layer.borderWidth = 1;//边框宽度(别忘记宽度呀,不设置显示不出来的)
//如需要也可以设置圆角矩形
self.layer.cornerRadius = 10;
self.layer.masksToBounds = YES;
}