Как получить доступ к символу, набранному пользователем перед его отображением в UITextField - PullRequest
0 голосов
/ 06 октября 2011

Я пишу приложение, в котором мне нужно проверить текст, введенный пользователем, на UITextField, char на char каким-либо методом.

Трудная вещь заключается в том, что клиент хочет выполнить всю проверку, прежде чем пользователь увидит символ в UITextField, потому что может быть ситуация, когда его серверное приложение не поддерживает знак '$', поэтому в моем методе проверки я должен заменить его на 'USD' строка - и он не хочет, чтобы пользователь видел '$', просто 'USD' сразу.

Я знаю о таких событиях, как UIControlEventEditingChanged и т. Д., Но, тем не менее, я не знаю 2 вещей:

  • как получить доступ к символу, набранному пользователем, прежде чем он будет замечен в UITextField, и выполнить проверку там

  • как заменить этот символ «на лету» и поместить его вручную в UITextField (но я полагаю, я просто добавлю это к [[textField] text] NSString

Заранее благодарю за любую помощь:)

Ответы [ 2 ]

1 голос
/ 06 октября 2011

Реализация метода UITextFieldDelegate textField:shouldChangeCharactersInRange:replacementString:, например:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    BOOL validated = ...; //do your validation
    return validated;
}
0 голосов
/ 06 октября 2011

Аналогично ответу omz, но более полный код, если вам нужно:

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

    NSString *filtered;
    filtered = [string stringByReplacingOccurrencesOfString:@"$" withString:@"USD"];

    //optionally if you want to only have alphanumeric characters
    //NSMutableCharacterSet *mcs1 = [[[NSCharacterSet letterCharacterSet] invertedSet] mutableCopy];  //only alphabet character
    //[mcs1 removeCharactersInString:@"0123456789"];  
    //filtered = [[filtered componentsSeparatedByCharactersInSet:mcs1] componentsJoinedByString:@""];
    //release mcs1;

    return [string isEqualToString:filtered];
}
...