如何在iOS中限制前缀文本字符串?

时间:2015-04-17 09:28:07

标签: ios delegates uitextfield uialertcontroller

如何限制textField字符串的前缀。

我想要textfield具有默认前缀字符串(AAAA - )的效果。

(AAAA-用户添加字符串后)

用户无法删除这些字符串,用户可以添加将字符串附加到textField

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

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

 }

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

有一些文本字段方法可以实现吗?

谢谢

---详细解释问题---

我使用UIAlertAction在AlertAction中添加文本字段,如下所示:

在界面我宣布

NSString *_prefixString;
在viewdidload中

设置initvalue

_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 - 。

但代表就像上层一样,我仍然可以删除前缀文本。

3 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您可以按照下面的代码设置textFieldsetLeftViewMode来实现您的目标。

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

希望这对你有所帮助。