Как я могу ограничить строку текстового поля префикса в iOS?

Как я могу ограничить префикс строки textField.

Я хочу, чтобы текстовое поле имело строку префикса по умолчанию (AAAA-).

(AAAA- после добавления пользователем строки)

И пользователь не может удалить эту строку, пользователь может добавить строку в textField.

Как я могу использовать нижеприведенный метод делегата для достижения эффекта?

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

 }

Я не хочу настраивать модальный вид для достижения этого эффекта.

Может ли какой-то метод текстового поля достичь?

благодарю вас

--- подробно объяснить вопрос ---

Я использую 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-.

Но делегат, как и верхний, я все еще могу удалить текст префикса.


person dickfala    schedule 17.04.2015    source источник
comment
возможный дубликат добавление текста в UITextField, который вы не можете удалить   -  person Mika    schedule 17.04.2015


Ответы (3)


Попробуй это,

Установите 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;
}
person Anusha Kottiyal    schedule 17.04.2015
comment
if ([textField.text isEqualToString:_prefixString] && range.location == _prefixString.length - 1 && range.length == 1) { textField.text = @AAAA- return NO; } Метод по-прежнему может нажимать клавишу удаления для удаленной строки префикса. @@ Я хочу всегда показывать AAAA-, пользователь может добавить строку к AAAA-любому. не могу AAAAxxx. - person dickfala; 17.04.2015
comment
@dickfala Почему вы устанавливаете текст textField внутри делегата? Для меня это работает, как вы сказали. - person Anusha Kottiyal; 17.04.2015

Если длина replaceString равна -1 и это диапазон строки, удаление которой вы хотите предотвратить, верните FALSE.

person Pablo A.    schedule 17.04.2015
comment
Это? если (string.length ‹ 4) { вернуть ложь; } Но я пробую этот код, он все еще может удалить. Спасибо - person dickfala; 17.04.2015
comment
Не совсем так, replacementString должен дать вам единственную строку, которую пользователь нажал на клавиатуре. Итак, if(string.length < 0) {return false;} - person Pablo A.; 17.04.2015

Вы можете добиться того, чего хотите, установив textField и setLeftViewMode в соответствии с приведенным ниже кодом.

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

Надеюсь, это поможет вам.

person Jatin Patel - JP    schedule 17.04.2015
comment
Привет, я использую UIAlertController. Поэтому я не могу добавить UILabel в UIAlertController. вы можете передать мой вопрос после моего редактирования. благодарю вас. - person dickfala; 17.04.2015