2015-04-17 43 views
1

如何限制textField字符串的前缀。如何限制iOS中的前缀文本字符串?

我希望textfield具有默认前缀字符串(AAAA-)的效果。 (后AAAA-用户添加字符串)

而且用户无法删除这些字符串,用户可以添加追加字符串到textField

我该如何使用下面的委托方法实现效果?

-(BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 

} 

我不想自定义模式视图来实现这些效果。

有一些textfield方法可以实现吗?

谢谢

---详细讲解问题---

我使用UIAlertAction添加文本字段中AlertAction象下面这样:

在界面上,我宣布

NSString *_prefixString; 

在viewdidload中设置初始值

_prefixString = @"AAAA-"; 

我已经在头文件中设置了UITextFieldDelegate。

然后alertviewcontroller设置如下:

UIAlertController *changeDeviceNameDialog =[UIAlertController 
              alertControllerWithTitle:NSLocalizedString(@"change_device_name",nil) message:nil preferredStyle:UIAlertControllerStyleAlert]; 

     UIAlertAction *cancelChangeDevNameAc = [UIAlertAction actionWithTitle:NSLocalizedString(@"cancel",nil) style:UIAlertActionStyleDefault handler:nil]; 
     UIAlertAction *enterChangeDevNameAc = [UIAlertAction actionWithTitle:NSLocalizedString(@"enter",nil) style:UIAlertActionStyleDefault handler:^(UIAlertAction *action){ 

     UITextField *newDeviceNameTF = changeDeviceNameDialog.textFields[0]; 
     }]; 

    [changeDeviceNameDialog addAction:cancelChangeDevNameAc]; 
    [changeDeviceNameDialog addAction:enterChangeDevNameAc]; 
    [changeDeviceNameDialog addTextFieldWithConfigurationHandler:^(UITextField *textField){ 
     textField.delegate = self; 
     textField.placeholder = NSLocalizedString(@"new_device_name", nil); 
     textField.text = _prefixString; 
     }]; 
     [self presentViewController:changeDeviceNameDialog animated:YES completion:nil]; 

// below refer the replay 

    -(BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
    { 
     if ([textField.text isEqualToString:_prefixString] && range.location == _prefixString.length - 1 && range.length == 1) { 
       return NO; 
     } 
     return YES; 
    } 

我想要的效果是当警报弹出框,文本字段具有默认的文本AAAA-,且用户无法清除AAAA-文本。

用户只需输入其他文字追加AAAA-。

但代表如上,我仍然可以删除前缀文本。

+0

[将文本添加到不能删除的UITextField](http:// stackoverflow。com/questions/16103453/adding-text-to-uitextfield-you-can-delete) – Mika

回答

2

试试这个,

设置你的prefixString

self.prefixString = @"PREFIX"; 

然后在delegate方法,

-(BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 

    if ([textField.text isEqualToString:_prefixString] && range.location == _prefixString.length - 1 && range.length == 1) { 

     return NO; 
    } 

    return YES; 
} 
+0

.text = @“AAAA-” return NO; } 该方法仍然可以按删除键到远程前缀字符串。@@我想总是显示AAAA-,用户可以将字符串添加到AAAA-whatever。不能AAAAxxx。 – dickfala

+0

@dickfala你为什么在代理中设置textField文本?对我来说,它就像你说的那样工作。 –

+0

谢谢!我解决了,我的前缀同样失败。 – dickfala

0

如果replacementString的长度为-1,并且它是要防止删除的字符串的范围,则返回FALSE。

+0

这些是? if(string.length <4) { return false; } 但是我尝试这些代码,它仍然可以删除。谢谢 – dickfala

+0

不完全,'replacementString'应该给你用户在键盘上按下的单个字符串。因此,如果([textField.text isEqualToString:_prefixString] && range.location == _prefixString.length - 1 && range.length == 1){if(string.length <0){return false;}' –

0

你可以实现你想要的设置textFieldsetLeftViewMode按喝道代码。

UILabel *lblPrifix = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 20, 20)]; 
lblPrifix.text = @"AAAA-"; 
[_textField setLeftView:poundLabel]; 
[_ textField setLeftViewMode:UITextFieldViewModeAlways]; 

希望这对你有所帮助。

+0

嗨,我使用UIAlertController。所以我不能在UIAlertController中添加UILabel。我可以在编辑后参考我的问题。谢谢。 – dickfala