在移动端iOS 的开发中,经常会有像下面的那种输入形式
这些看起来没有输入效果的,其实都是TextField,当然也可以用其他的控件去实现,但是在同一个分区的情况下,用统一的控件去实现才便于简化代码;
1、前面两种是点击没有效果的,使用textField.enable = NO;实现,那么就会出现效果跟label一样的显示效果,并且多了placeholder;
2、矩形方框中的两种是不具备编辑功能,但是支持点击事件功能的,它的实现可以通过一下方式实现:
实现textFeild的
[textField addTarget:self action:@selector(textFieldStataEditing:) forControlEvents:UIControlEventEditingDidBegin];
根据tag判断你需要是哪些textField,然后做相应的处理
-(void)textFieldStataEditing:(UITextField*)textField{
if (textField.tag == 2) {
[textField resignFirstResponder];
[self showTimeSelectView];//此处为点击事件
return;
}
if (textField.tag == 5) {
[textField resignFirstResponder];
[self showAddressSelectView]; //此处为点击事件
return;
}
}
3、然后是像电话号码那种有空格或者横线形式的格式
- 需要实现textField的代理
- 实现代理方法
-(void)textFieldEdingChange:(UITextField*)textField{if (textField.tag == 4) {
NSString* tempString = [textField getStringFilterSpecialCharacter:@" "];
if (tempString.length == 11) {
[textField resignFirstResponder];
}
}
}
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
if (textField.tag == 4) {
return [textField setPhoneNumberStyleShouldChangeCharactersInRange:range replacementString:string];
}
return YES;
}
其中/**
设置电话号码的显示格式 (如:112 1189 9876)
@param range 长度
@param string 输入的字符
@return 返回是否可继续输入
*/
-(BOOL)setPhoneNumberStyleShouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
// NSUInteger proposedNewLength = textField.text.length - range.length + string.length;
//string.length>0此时执行添加操作
if (string.length>0) {
NSMutableString *str=[NSMutableString stringWithString:self.text];
while (self.text.length==3||self.text.length==8) {
if (self.text.length==3) {
[str insertString:@" " atIndex:3];
}
else if(self.text.length==8){
[str insertString:@" " atIndex:8];
}
self.text = [NSString stringWithString:str];
}
}
//string.length=0此时执行删除操作
else if(string.length==0){
NSMutableString *str=[NSMutableString stringWithString:self.text];
while (self.text.length==5||self.text.length==10) {
if (self.text.length==5) {
[str deleteCharactersInRange:NSMakeRange(4, 1)];
}
else if(self.text.length==10){
[str deleteCharactersInRange:NSMakeRange(9, 1)];
}
self.text = [NSString stringWithString:str];
}
// NSLog(@"%@",textField.text);
}
// 限制输入长度为13.(分隔线也计算在内)
if (self.text.length > 13){
return NO;//限制长度
}
return YES;
}
建议写到textField的分类中,便于随时调用,该代码实现了对手机号的格式控制