1

我需要我的用户输入一些数据,比如 DF-DJSL,所以我把它放在代码中:

theTextField.autocapitalizationType = UITextAutocapitalizationTypeAllCharacters;

但不幸的是,发生的情况是第一个输入大写字母,然后在输入连字符后立即输入小写字母,然后其余的返回大写字母,因此产生这样的输出(除非用户在输入连字符后手动点击 shift 按钮): DF-dJSL

我怎样才能解决这个问题?

非常感谢

4

1 回答 1

7

您没有提及您正在使用哪个 SDK,但针对 3.0 及更高版本,我看到了您想要的行为。

也就是说,当他们使用委托的textFieldDidEndEditing方法完成编辑时,您始终可以将文本更改为大写:

- (void)textFieldDidEndEditing:(UITextField *)textField {
    NSString *textToUpper = [textField.text uppercaseString];   
    [theTextField setText:textToUpper];
}

或者,通过在文本字段更改时设置通知,您可以在输入文本时更改文本:

// setup the UITextField
{
    theTextField.delegate = self;
    theTextField.autocapitalizationType = UITextAutocapitalizationTypeAllCharacters;
    [theTextField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
}

您必须这样做,因为与UISearchBar不同,UITextField没有实现textDidChange。大概是这样的吧?

- (void)textFieldDidChange:(UITextField *)textField {
    NSRange range = [textField.text rangeOfString : @"-"];
    if (range.location != NSNotFound) {
        theTextField.autocapitalizationType = UITextAutocapitalizationTypeAllCharacters;
    }
}
于 2010-09-04T14:14:54.240 回答