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

How Can I restrict the prefix textfield string in 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;
     }

我想要的效果是弹出alert的时候,textfield有默认文本AAAA-,用户不能清除AAAA-文本。

用户可以输入附加 AAAA- 的其他文本。

但是像upper一样的delegate,我还是可以去掉前缀文字的。

如果replacementString的长度是-1,并且是你要防止被删除的字符串的范围,那么return FALSE。

试试这个,

设置你的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;
}

您可以根据下面的代码设置 textFieldsetLeftViewMode 来实现您想要的效果。

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

希望对您有所帮助。