文档章节

UITextField与UITextView的区别

Ethan-GOGO
 Ethan-GOGO
发布于 2015/09/01 22:16
字数 1980
阅读 164
收藏 0

 UITextField继承UIControl

     1.文字永远是一行,不能显示多行文字

     2.有placehoder属性设置占位文字

     3.继承自UIControl

     4.监听行为

     1> 设置代理

     2> addTarget:action:forControlEvents:

     3> 通知:UITextFieldTextDidChangeNotification

 

 UITextView继承UIScrollView

     1.能显示任意行文字

     2.不能设置占位文字

     3.继承自UIScollView

     4.监听行为

     1> 设置代理

     2> 通知:UITextViewTextDidChangeNotification

 

UITextField的详细使用

1 设置边框样式,只有设置了才会显示边框样式  

  text.borderStyle = UITextBorderStyleRoundedRect;

2 输入框中是否有个叉号,在什么时候显示,用于一次性删除输入框中的内容

  text.clearButtonMode = UITextFieldViewModeAlways;
  
  typedef enum {
    UITextFieldViewModeNever,  重不出现
    UITextFieldViewModeWhileEditing, 编辑时出现
    UITextFieldViewModeUnlessEditing,  除了编辑外都出现
    UITextFieldViewModeAlways   一直出现
} UITextFieldViewMode;

3 每输入一个字符就变成点 用语密码输入

text.secureTextEntry = YES;

 

4 是否纠错

  text.autocorrectionType = UITextAutocorrectionTypeNo;
  
  typedef enum {
    UITextAutocorrectionTypeDefault, 默认
    UITextAutocorrectionTypeNo,   不自动纠错
    UITextAutocorrectionTypeYes,  自动纠错
} UITextAutocorrectionType;

 

5 再次编辑就清空

  text.clearsOnBeginEditing = YES;

 

6 内容的垂直对齐方式  

UITextField继承自UIControl,此类中有一个属性contentVerticalAlignment
  
  text.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;

 

7 设置为YES时文本会自动缩小以适应文本窗口大小  

  textFied.adjustsFontSizeToFitWidth = YES;
  
  //设置自动缩小显示的最小字体大小
  text.minimumFontSize = 20;

 

8 设置键盘的样式

  text.keyboardType = UIKeyboardTypeNumberPad;
  
  typedef enum {
    UIKeyboardTypeDefault,       默认键盘,支持所有字符         
    UIKeyboardTypeASCIICapable,  支持ASCII的默认键盘
    UIKeyboardTypeNumbersAndPunctuation,  标准电话键盘,支持+*#字符
    UIKeyboardTypeURL,            URL键盘,支持.com按钮 只支持URL字符
UIKeyboardTypeNumberPad,              数字键盘
UIKeyboardTypePhonePad,     电话键盘
    UIKeyboardTypeNamePhonePad,   电话键盘,也支持输入人名
UIKeyboardTypeEmailAddress,   用于输入电子 邮件地址的键盘     
UIKeyboardTypeDecimalPad,     数字键盘 有数字和小数点
    UIKeyboardTypeTwitter,        优化的键盘,方便输入@、#字符
    UIKeyboardTypeAlphabet = UIKeyboardTypeASCIICapable, 
} UIKeyboardType;

 

9 首字母是否大写

  text.autocapitalizationType = UITextAutocapitalizationTypeNone;
  
  typedef enum {
    UITextAutocapitalizationTypeNone, 不自动大写
    UITextAutocapitalizationTypeWords,  单词首字母大写
    UITextAutocapitalizationTypeSentences,  句子的首字母大写
    UITextAutocapitalizationTypeAllCharacters, 所有字母都大写
} UITextAutocapitalizationType;

 

10 return键变成什么键‍

  text.returnKeyType =UIReturnKeyDone;
  
  typedef enum {
    UIReturnKeyDefault, 默认 灰色按钮,标有Return
    UIReturnKeyGo,      标有Go的蓝色按钮
    UIReturnKeyGoogle,标有Google的蓝色按钮,用语搜索
    UIReturnKeyJoin,标有Join的蓝色按钮
    UIReturnKeyNext,标有Next的蓝色按钮
    UIReturnKeyRoute,标有Route的蓝色按钮
    UIReturnKeySearch,标有Search的蓝色按钮
    UIReturnKeySend,标有Send的蓝色按钮
    UIReturnKeyYahoo,标有Yahoo的蓝色按钮
    UIReturnKeyYahoo,标有Yahoo的蓝色按钮
    UIReturnKeyEmergencyCall, 紧急呼叫按钮
} UIReturnKeyType;

 

11 键盘外观

textView.keyboardAppearance=UIKeyboardAppearanceDefault;

typedef enum {
UIKeyboardAppearanceDefault, 默认外观,浅灰色
UIKeyboardAppearanceAlert,     深灰 石墨色
} UIReturnKeyType;

 

 12 最右侧加图片是以下代码左侧类似

    UIImageView *image=[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"right.png"]];
    text.rightView=image;
    text.rightViewMode = UITextFieldViewModeAlways; 
    
    typedef enum {
    UITextFieldViewModeNever,
    UITextFieldViewModeWhileEditing,
    UITextFieldViewModeUnlessEditing,
    UITextFieldViewModeAlways
} UITextFieldViewMode;

 

13 按return键键盘往下收  

[txtField becomeFirstResponder];     [text resignFirstResponder];
[txtField endEditing:YES]; 
[self.view endEditing:YES];

 

14 重写绘制行为

除了UITextField对象的风格选项,你还可以定制化UITextField对象,为他添加许多不同的重写方法,来改变文本字段的显示行为。这些方法都会返回一个CGRect结构,制定了文本字段每个部件的边界范围。以下方法都可以重写。

– textRectForBounds:      //重写来重置文字区域

– drawTextInRect:          //改变绘文字属性.重写时调用super可以按默认图形属性绘制,若自己完全重写绘制函数,就不用调用super了.

– placeholderRectForBounds:  //重写来重置占位符区域

– drawPlaceholderInRect:  //重写改变绘制占位符属性.重写时调用super可以按默认图形属性绘制,若自己完全重写绘制函数,就不用调用super了.

– borderRectForBounds:  //重写来重置边缘区域

– editingRectForBounds:  //重写来重置编辑区域

– clearButtonRectForBounds:  //重写来重置clearButton位置,改变size可能导致button的图片失真

– leftViewRectForBounds:

– rightViewRectForBounds:

 

15 委托方法

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{  
//返回一个BOOL值,指定是否循序文本字段开始编辑  
    return YES;  
}  
 
- (void)textFieldDidBeginEditing:(UITextField *)textField{  
 //开始编辑时触发,文本字段将成为first responder  
}  
 
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField{  
//返回BOOL值,指定是否允许文本字段结束编辑,当编辑结束,文本字段会让出first responder  
   //要想在用户结束编辑时阻止文本字段消失,可以返回NO  
   //这对一些文本字段必须始终保持活跃状态的程序很有用,比如即时消息  
   
    return NO;  
}  
 
- (BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{  
//当用户使用自动更正功能,把输入的文字修改为推荐的文字时,就会调用这个方法。  
//这对于想要加入撤销选项的应用程序特别有用  
//可以跟踪字段内所做的最后一次修改,也可以对所有编辑做日志记录,用作审计用途。     
//要防止文字被改变可以返回NO  
//这个方法的参数中有一个NSRange对象,指明了被改变文字的位置,建议修改的文本也在其中  
 
     return YES;  
}  
 
- (BOOL)textFieldShouldClear:(UITextField *)textField{  
 
//返回一个BOOL值指明是否允许根据用户请求清除内容  
//可以设置在特定条件下才允许清除内容  
 
     return YES;  
}  
 
-(BOOL)textFieldShouldReturn:(UITextField *)textField{  
 
//返回一个BOOL值,指明是否允许在按下回车键时结束编辑  
 //如果允许要调用resignFirstResponder 方法,这回导致结束编辑,而键盘会被收起[textField resignFirstResponder];
//查一下resign这个单词的意思就明白这个方法了  
     return YES;  
}

 

16 通知

UITextField派生自UIControl,所以UIControl类中的通知系统在文本字段中也可以使用。除了UIControl类的标准事件,你还可以使用下列UITextField类特有的事件

UITextFieldTextDidBeginEditingNotification
UITextFieldTextDidChangeNotification
UITextFieldTextDidEndEditingNotification

当文本字段退出编辑模式时触发。通知的object属性存储了最终文本。

因为文本字段要使用键盘输入文字,所以下面这些事件发生时,也会发送动作通知

UIKeyboardWillShowNotification   //键盘显示之前发送
UIKeyboardDidShowNotification    //键盘显示之后发送
UIKeyboardWillHideNotification   //键盘隐藏之前发送
UIKeyboardDidHideNotification    //键盘隐藏之后发送

 

UITextField的运用

1 限制只能输入特定的字符

 -(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
    NSCharacterSet *cs;
    cs = [[NSCharacterSet characterSetWithCharactersInString:NUMBERS]invertedSet];
    NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs]componentsJoinedByString:@""]; //按cs分离出数组,数组按@""分离出字符串
    BOOL canChange = [string isEqualToString:filtered];
    return canChange;
}

 上面那个NUMBERS是一个宏,可以在文件顶部定义:

#define NUMBERS @”0123456789\n” (这个代表可以输入数字和换行,请注意这个\n,如果不写这个,Done按键将不会触发,如果用在SearchBar中,将会不触发Search事件,因为你自己限制不让输入\n,好惨,我在项目中才发现的。)

所以,如果你要限制输入英文和数字的话,就可以把这个定义为:

#define kAlphaNum   @”ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789″。

当然,你还可以在以上方法return之前,做一提示的,比如提示用户只能输入数字之类的。如果你觉得有需要的话。

 

2 限制只能输入一定长度的字符

 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string; 
{  //string就是此时输入的那个字符 textField就是此时正在输入的那个输入框 返回YES就是可以改变输入框的值 NO相反
if ([string isEqualToString:@"\n"])  //按会车可以改变
    { 
        return YES; 
    } 
    NSString * toBeString = [textField.text stringByReplacingCharactersInRange:range withString:string]; //得到输入框的内容
    if (self.myTextField == textField)  //判断是否时我们想要限定的那个输入框
    { 
        if ([toBeString length] > 20) { //如果输入框内容大于20则弹出警告
            textField.text = [toBeString substringToIndex:20]; 
            UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:nil message:@"超过最大字数不能输入了" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil] autorelease]; 
            [alert show]; 
            return NO; 
        } 
    } 
    return YES; 
}

 

3 编辑时候,视图在键盘顶部

self.textField.delegate = self;
#pragma mark - UITextField
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    //1.发送监控键盘通知
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidChangeFrame:) name:UIKeyboardWillChangeFrameNotification object:nil];

}

- (void)keyboardDidChangeFrame:(NSNotification *)notification
{    
    //视图坐标变化
    NSDictionary *userInfo = notification.userInfo;
    //动作时间
    double duration = [userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];
    //键盘弹出结束的frame
    CGRect keyBoardRect = [userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];

    if (CGRectGetMaxY(self.scrollView.frame) >= keyBoardRect.origin.y) {
        [UIView animateWithDuration:duration animations:^{

            self.view.y = keyBoardRect.origin.y - self.view.height + self.viewIndex;
         
        }];
    }
 
    
}
//3. 释放通知
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    
    [[NSNotificationCenter defaultCenter] removeObserver:self];
    
}

© 著作权归作者所有

上一篇: 系统通知
下一篇: Sql server--事务
Ethan-GOGO
粉丝 13
博文 174
码字总数 82033
作品 0
广州
私信 提问
用视图上移解决UITextField/UITextView被键盘遮盖问题

先看看UILabel/UITextField/UITextView的区别: UILabel 显示的文本只读,无法编辑,可以根据文字个数自动换行; UITextField 可编辑本文,但是无法换行,只能在一行显示;当点击键盘上的ret...

yoyoso
2015/03/18
557
0
用UITextView撸一个顺畅的评论输入框

对比UITextField 继承关系: UITextField继承自UIControl,UITextView继承自UIScrollView; 输入行数 UITextView支持多行输入,可以滑屏垂直滚动,UITextField仅支持单行输入 Placeholder UI...

STzen
2018/05/10
0
0
ios中实现对UItextField,UITextView等输入框的字数限制

转: 如何实现对UITextField ,UITextView等输入框的 字数限制 1. 如何实现对UITextField ,UITextView等输入框的 字数限制 (1)首先,肯定要 让controller 实现 UITextFieldDelegate (针对...

meilidashijie
2013/01/08
5.1K
0
iOS小技巧---改变uisearchbar中的cancel按钮的文字、取消clearButton

#pragma mark searchBar开始输入文字时 //汉化取消按钮 - (void)searchBarTextDidBeginEditing:(UISearchBar )searchBar{ searchBar.showsCancelButton = YES; if ([[[UIDevice currentDevi......

夕阳_jhe
2015/04/15
284
0
用基本控件简单地仿QQ登录界面

// Created by 妖精的尾巴 on 15-8-14. // Copyright (c) 2015年 妖精的尾巴. All rights reserved. // #import "ViewController.h" @interface ViewController () { UILabel backgroundLab......

不孤独的美食家
2015/08/14
790
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周四乱弹 —— 当你简历注水但还是找到了工作

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @花间小酌 :#今日歌曲推荐# 分享成龙的单曲《男儿当自强》。 《男儿当自强》- 成龙 手机党少年们想听歌,请使劲儿戳(这里) @hxg2016 :刚在...

小小编辑
今天
3K
22
靠写代码赚钱的一些门路

作者 @mezod 译者 @josephchang10 如今,通过自己的代码去赚钱变得越来越简单,不过对很多人来说依然还是很难,因为他们不知道有哪些门路。 今天给大家分享一个精彩的 GitHub 库,这个库整理...

高级农民工
昨天
5
0
用好项目管理工具,人人都可以成为项目经理

现在市面上的项目管理工具越来越多了,但是大多数都是一些协同工具或轻量项目管理工具。如果是多团队、跨部门使用或者企业级的项目管理,从管理思想到工具运用,需要适应企业的业务流程体系,...

cs平台
昨天
13
0
只需一步,在Spring Boot中统一Restful API返回值格式与统一处理异常

统一返回值 在前后端分离大行其道的今天,有一个统一的返回值格式不仅能使我们的接口看起来更漂亮,而且还可以使前端可以统一处理很多东西,避免很多问题的产生。 比较通用的返回值格式如下:...

晓月寒丶
昨天
70
0
区块链应用到供应链上的好处和实际案例

区块链可以解决供应链中的很多问题,例如记录以及追踪产品。那么使用区块链应用到各产品供应链上到底有什么好处?猎头悬赏平台解优人才网小编给大家做个简单的分享: 使用区块链的最突出的优...

猎头悬赏平台
昨天
32
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部