iOS中输入框设置指定字符输入的方法
前言
对于开发者来说,在很多情况下,一般的输入框需要按照要求进行输入,输入内容由开发人员来指定。例如:密码输入框只能输入纯数字或者是拼音与数字结合的文本等,那么我们在开发的时候就需要做一些输入文本的限时。下面话不多说了,来一起看看详细的介绍吧。
一、只能输入纯数字
在这里以UITextField为例:其实现代码如下:
-(BOOL)textField:(UITextField*)textFieldshouldChangeCharactersInRange:(NSRange)rangereplacementString:(NSString*)string{
return[selfvalidateNumber:string];
}
-(BOOL)validateNumber:(NSString*)number{
BOOLres=YES;
NSCharacterSet*tmpSet=[NSCharacterSetcharacterSetWithCharactersInString:@"0123456789"];
inti=0;
while(i
另外我们还有一种更加简便的方法来实现这一目的:
首先宏定义
#defineNUMBER@"0123456789"
接着
-(BOOL)textField:(UITextField*)textFieldshouldChangeCharactersInRange:(NSRange)rangereplacementString:(NSString*)string
{
NSCharacterSet*cs=[[NSCharacterSetcharacterSetWithCharactersInString:NUMBER]invertedSet];
NSString*filtered=[[stringcomponentsSeparatedByCharactersInSet:cs]componentsJoinedByString:@""];
return[stringisEqualToString:filtered];
}
二、只能输入纯大小写字母
和以上只能输入纯数字类似,实现起来简单,只需要宏定义
#defineLETTER@"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
然后实现
-(BOOL)textField:(UITextField*)textFieldshouldChangeCharactersInRange:(NSRange)rangereplacementString:(NSString*)string
{
NSCharacterSet*cs=[[NSCharacterSetcharacterSetWithCharactersInString:LETTER]invertedSet];
NSString*filtered=[[stringcomponentsSeparatedByCharactersInSet:cs]componentsJoinedByString:@""];
return[stringisEqualToString:filtered];
}
三、大小写字母和数字结合输入
对照以上
#defineLETTER_NUMBER@"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
同样道理具体能够输入那些内容如果输入内容能够一一列举的话我们就可以通过define来设置了,实现起来超简单。
限制只能输入中文
在这里用到了观察者(更多观察者模式的介绍参考这里:https://www.nhooo.com/article/76122.htm)
-(void)viewDidLoad{
[superviewDidLoad];
_myTextField.delegate=self;
[[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(textFiledEditChanged:)name:UITextFieldTextDidChangeNotificationobject:_myTextField];
}
-(BOOL)textFieldShouldReturn:(UITextField*)textField{
[textFieldresignFirstResponder];
//过滤非汉字字符
textField.text=[selffilterCharactor:textField.textwithRegex:@"[^\u4e00-\u9fa5]"];
if(textField.text.length>=4){
textField.text=[textField.textsubstringToIndex:4];
}
returnNO;
}
-(void)textFiledEditChanged:(id)notification{
UITextRange*selectedRange=_myTextField.markedTextRange;
UITextPosition*position=[_myTextFieldpositionFromPosition:selectedRange.startoffset:0];
if(!position){////没有高亮选择的字
//过滤非汉字字符
_myTextField.text=[selffilterCharactor:_myTextField.textwithRegex:@"[^\u4e00-\u9fa5]"];
if(_myTextField.text.length>=4){
_myTextField.text=[_myTextField.textsubstringToIndex:4];
}
}else{//有高亮文字
//donothing
}
}
-(NSString*)filterCharactor:(NSString*)stringwithRegex:(NSString*)regexStr{
NSString*searchText=string;
NSError*error=NULL;
NSRegularExpression*regex=[NSRegularExpressionregularExpressionWithPattern:regexStroptions:NSRegularExpressionCaseInsensitiveerror:&error];
NSString*result=[regexstringByReplacingMatchesInString:searchTextoptions:NSMatchingReportCompletionrange:NSMakeRange(0,searchText.length)withTemplate:@""];
returnresult;
}
-(void)dealloc{
[[NSNotificationCenterdefaultCenter]removeObserver:self];
}
如果要限制输入字符位数的话可以直接设置,这个实现上有很多种,最简单的就是
-(void)textViewDidChange:(UITextView*)textView{
NSIntegernumber=[textView.textlength];
if(number>300){
textView.text=[textView.textsubstringToIndex:300];
}
}
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。