我正在開發一個應用程序,以編程方式創建一些UITextField
,並且我允許UITextField
中的最大1個字符。如何以編程方式將光標移動到下一個UITextField?
這是完美的工作。
但書寫的字符後,用戶必須在未來UITextField
再次點擊提交鍵盤
輸入1個字符,光標會自動移到下一UITextField
後。
我該怎麼做?
我正在開發一個應用程序,以編程方式創建一些UITextField
,並且我允許UITextField
中的最大1個字符。如何以編程方式將光標移動到下一個UITextField?
這是完美的工作。
但書寫的字符後,用戶必須在未來UITextField
再次點擊提交鍵盤
輸入1個字符,光標會自動移到下一UITextField
後。
我該怎麼做?
抓住代表通知你你的文本框已被更改。檢查新長度是否爲1.如果是,請在下一個字段中撥打becomeFirstResponder
。
我發現這種方法..
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
if(textField == textField1)
{
if (textField1.text.length > 0 && range.length == 0)
{
return NO;
}
else {
[textField1 setText:newString];
[textField2 becomeFirstResponder];
return YES;
}
}
else if(textField == textField2)
{
if (textField2.text.length > 0 && range.length == 0)
{
return NO;
}else {
[textField2 setText:newString];
[textField3 becomeFirstResponder];
return YES;
}
}
}
我們可以做的另一種說法... 聲明在viewDidLoad中和方法這一行。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(endEditingTextField:) name:@"UITextFieldTextDidChangeNotification" object:txtfield1];
- (void) endEditingTextField:(NSNotification *)note {
if ([[txtfield1 text] length] > 0)
{
[txtfield1 resignFirstResponder];
[txtfield2 becomeFirstResponder];
}
}
希望這有助於...
它不起作用? – 2014-05-31 10:25:55
它爲我工作。任何方式我添加另一種方式來做到這一點。 – 2014-06-10 15:42:34
您對只使用
[textField'sName becomeFirstResponder];
這可以在3個簡單步驟來完成:
在代碼:
if ([currentTextFieldWithCursor canResignFirstResponder]) [currentTextFieldWithCursor resignFirstResponder];
UITextField *followingTextField = // just get it!
if ([followingTextField canBecomeFirstResponder]) [followingTextField becomeFirstResponder];
希望它能幫助。
以上解決方案不起作用。該解決方案也爲我工作:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
if(firstCodeField == textField){
[firstCodeField setText:newString];
[secondCodeField becomeFirstResponder];
}
if(secondCodeField == textField){
[secondCodeField setText:newString];
[thirdCodeField becomeFirstResponder];
}
NSUInteger newLength = [textField.text length] + [string length] - range.length;
return (newLength > 1) ? NO : YES;
}
剛剛成立
UITextFieldDelegate
,並在過去的.m文件這種方法。它將適用於OTP文本框。
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
if(_txt1 == textField){
if ([_txt1.text length] == 0) {
[_txt1 setText:newString];
[_txt2 becomeFirstResponder ];
}
}
if(_txt2 == textField){
if ([_txt2.text length] == 0) {
[_txt2 setText:newString];
[_txt3 becomeFirstResponder];
}
}
if(_txt3 == textField){
if ([_txt3.text length] == 0) {
[_txt3 setText:newString];
[_txt4 becomeFirstResponder];
}
}
if(_txt4 == textField){
if ([_txt4.text length] == 0) {
[_txt4 setText:newString];
}
}
NSUInteger newLength = [textField.text length] + [string length] - range.length;
return (newLength > 1 && newLength == 2) ? NO : YES;
}
希望這項工作對任何人。 :)
這是如何完成的?你可以展示一些示例代碼嗎? – quantum 2010-11-18 16:08:35
'[textField becomeFirstResponder]' – akashivskyy 2012-12-27 09:38:07