Dee*_*san 4 objective-c uitextfield ios uitextfielddelegate
我有一个OTP屏幕,我必须在4个Diff TextFields中输入4位数密码的OTP,场景如下:
我已经管理了高达70%的工作,但只有当用户输入所有textField时,后退空间才有效.我正在粘贴我的代码.
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
// This allows numeric text only, but also backspace for deletes
if (string.length > 0 && ![[NSScanner scannerWithString:string] scanInt:NULL])
return NO;
NSUInteger oldLength = [textField.text length];
NSUInteger replacementLength = [string length];
NSUInteger rangeLength = range.length;
NSUInteger newLength = oldLength - rangeLength + replacementLength;
// This 'tabs' to next field when entering digits
if (newLength == 1) {
if (textField == _pin1)
{
[self performSelector:@selector(setNextResponder:) withObject:_pin2 afterDelay:0];
}
else if (textField ==_pin2)
{
[self performSelector:@selector(setNextResponder:) withObject:_pin3 afterDelay:0];
}
else if (textField == _pin3)
{
[self performSelector:@selector(setNextResponder:) withObject:_pin4 afterDelay:0];
}
}
//this goes to previous field as you backspace through them, so you don't have to tap into them individually
else if (oldLength > 0 && newLength == 0) {
if (textField ==_pin4)
{
[self performSelector:@selector(setNextResponder:) withObject:_pin3 afterDelay:0];
}
else if (textField == _pin3)
{
[self performSelector:@selector(setNextResponder:) withObject:_pin2 afterDelay:0];
}
else if (textField == _pin2)
{
[self performSelector:@selector(setNextResponder:) withObject:_pin1 afterDelay:0];
}
}
return newLength <= 1;
}
- (void)setNextResponder:(UITextField *)nextResponder
{
[nextResponder becomeFirstResponder];
}
Run Code Online (Sandbox Code Playgroud)
工作:
需要给标签到UITextView在StoryBoard.
像textField1 = 101,textField2 = 102,textField3 = 103,textField4 = 104
将以下代码放入您的viewcontroller.
- (BOOL)keyboardInputShouldDelete:(UITextField *)textField {
BOOL shouldDelete = YES;
if ([textField.text length] == 0 && [textField.text isEqualToString:@""]) {
long tagValue = textField.tag - 1;
UITextField *txtField = (UITextField*) [self.view viewWithTag:tagValue];
[txtField becomeFirstResponder];
}
return shouldDelete;
}
Run Code Online (Sandbox Code Playgroud)
以下代码为下一个UItextField焦点.
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
// This allows numeric text only, but also backspace for deletes
if (string.length > 0 && ![[NSScanner scannerWithString:string] scanInt:NULL])
return NO;
if ([textField.text length] == 0) {
[self performSelector:@selector(changeTextFieldFocusToNextTextField:) withObject:textField afterDelay:0.3];
}
return YES;
}
-(void)changeTextFieldFocusToNextTextField:(UITextField*)textField{
long tagValue = textField.tag + 1;
UITextField *txtField = (UITextField*) [self.view viewWithTag:tagValue];
[txtField becomeFirstResponder];
}
Run Code Online (Sandbox Code Playgroud)
样本输出
| 归档时间: |
|
| 查看次数: |
1374 次 |
| 最近记录: |