Я хочу, чтобы фокус текстового поля переключился на следующее текстовое поле, как только в текущее текстовое поле введено 2 символа. Я использую этот код, но я считаю, что размещение оператора return вызывает определенные проблемы, такие как: 1) в последнем текстовом поле оно не ограничивает его двумя символами. 2) После смещения фокуса на следующее текстовое поле. Если я вернусь в предыдущее поле «Текст», то он также позволит мне ввести более двух символов. 3) Из-за добавления «self.firstResponder = текстовое поле в методе редактирования textfieldDidBegin мои другие текстовые поля становятся невосприимчивыми, т. Е. Не позволяют мне вводить какой-либо текст. Вот мой код для всех трех методов .:-- это код в методе shouldCharctersInRange:Смещение фокуса на следующее текстовое поле
(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range
replacementString:(NSString *)string {
NSString * newString = [textField.text stringByReplacingCharactersInRange:range
withString:string];
if (string.length==0) {
return YES;
}
if (textField == txt_mins) {
return [[AppDelegate sharedInstance] setNumberFormat:textField newString:newString
IntegerLimit:5 FractionLimit:2 NumberType:2];
}
else if (textField == txt_units){
return [[AppDelegate sharedInstance] setNumberFormat:textField newString:newString
IntegerLimit:5 FractionLimit:2 NumberType:2];
}
// Below logic is for All 4 Modifer Textfields
// we are restricting the user to enter only max 2 characters in modifier textfields
and
also automatically
// converting each entered character to the uppercase string.
if (textField==txt_modifier1 || textField==txt_modifier2 || textField==txt_modifier3 ||
textField==txt_modifier4) {
// This condition is restricting the user from entering the special characters in the
modifier textfield.
if ([string rangeOfCharacterFromSet:[[NSCharacterSet alphanumericCharacterSet]
invertedSet]].location != NSNotFound) {
// There are non-alphanumeric characters in the replacement string
return NO;
}
//Added by Shikhar
// dated: 18 June, 2013
else{
NSString *result = [textField.text stringByReplacingCharactersInRange:range
withString:string.uppercaseString];
// this condition is automatically transferring the focus to the next textfield as
soon we type two characters in the\
// the current textfield.
textField.text = result;
if (result.length == 2){
[self toggleTextfield];
}
return NO;
}
}
return YES;
}
- (void) toggleTextfield
{
NSInteger nextTag = self.firstResponder.tag;
nextTag += 1;
UITextField *nextTextField = (UITextField *)[self.view viewWithTag:nextTag];
if (nextTextField)
{ [nextTextField setUserInteractionEnabled:YES];
[nextTextField becomeFirstResponder];
}
} и код для редактирования textfieldDidBegin заключается в следующем:
- (void)textFieldDidBeginEditing:(UITextField *)textField {
self.firstResponder = textField;
[textField setInputAccessoryView:tb_doneToolbar];
txt_currentFocusedTextfield = textField;
CGRect textFieldRect =[self.view.window convertRect:textField.bounds
fromView:textField];
CGRect viewRect =[self.view.window convertRect:self.view.bounds fromView:self.view];
CGFloat midline = textFieldRect.origin.y +1.0*textFieldRect.size.height;
CGFloat numerator =midline - viewRect.origin.y- MINIMUM_SCROLL_FRACTION *
viewRect.size.height;
CGFloat denominator =(MAXIMUM_SCROLL_FRACTION - MINIMUM_SCROLL_FRACTION)*
viewRect.size.height;
CGFloat heightFraction = numerator/denominator;
animatedDistance = floor(162.0 * heightFraction);
CGRect viewFrame = self.view.frame;
viewFrame.origin.y -= animatedDistance;
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:KEYBOARD_ANIMATION_DURATION];
[self.view setFrame:viewFrame];
[UIView commitAnimations];
}
ЕСЛИ кто-то может помочь, тогда он будет высоко оценен.
Никогда не устанавливайте firstResponder напрямую, используйте 'theFirstResponder' и' resignFirstResponder'. – Kevin
Я не уверен, где вы предложили мне внести изменения. Вы можете указать это! Благодарю. – Shikhar
Из вашего вопроса «3» Из-за добавления «self.firstResponder = текстовое поле в методе редактирования textfieldDidBegin» <- везде, где вы это сделали. И это, вероятно, не полное исправление, просто комментарий к этому конкретному коду. – Kevin