自动移动到下一个1个字符后面

自动移动到下一个1个字符后面

本文介绍了UITextField,自动移动到下一个1个字符后面的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

情景:我有4个只能接受1个字符的UITextField。

Scenario: I have 4 UITextFields that only accept 1 character. Easy.

问题:输入1个字符后,我希望下一个TextField自动变为活动状态,而无需按下(即我使用的是UIKeyboardTypeNumberPad,而(我知道我可以通过编程实际创建一个下一个按钮,但是我不想去那么远,只需输入1个字符后,下一个字段就会自动变为活动。

Problem: After I enter the 1 character, I want the next TextField to become active automatically without having to press next (i.e. I'm using the UIKeyboardTypeNumberPad, and theres no NEXT button. (I KNOW I can actually create a next button programmatically, but I dont want to go that far, just need the next field to become active automatically after the 1 character is entered.

#define MAX_LENGTH 1

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSCharacterSet *myCharSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];
    for (int i = 0; i < [string length]; i++) {
    unichar c = [string characterAtIndex:i];
        if (![myCharSet characterIsMember:c]) {
            return NO;
        }
    }
        NSUInteger newLength = [textField.text length] + [string length] - range.length;
        return (newLength > 1) ? NO : YES;
}


-(BOOL)textFieldShouldReturn:(UITextField *)textField {
    if (textField == pc1) {
        [pc2 becomeFirstResponder];
    }else if (textField == pc2) {
        [pc3 becomeFirstResponder];
    }else if (textField == pc3) {
        [pc4 becomeFirstResponder];
    }else if (textField == pc4) {
        [textField resignFirstResponder];
    }
    return YES;
}


推荐答案

修改我在这里找到的一些代码:

I arrived at a solution by modifying some code I found here:http://www.thepensiveprogrammer.com/2010/03/customizing-uitextfield-formatting-for.html

首先将您的视图控制器设置为文本框。

First set the your view controller to be the delegate of the textfields.

然后执行以下操作:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    BOOL shouldProcess = NO; //default to reject
    BOOL shouldMoveToNextField = NO; //default to remaining on the current field

    int insertStringLength = [string length];
    if(insertStringLength == 0){ //backspace
        shouldProcess = YES; //Process if the backspace character was pressed
    }
    else {
        if([[textField text] length] == 0) {
            shouldProcess = YES; //Process if there is only 1 character right now
        }
    }

    //here we deal with the UITextField on our own
    if(shouldProcess){
        //grab a mutable copy of what's currently in the UITextField
        NSMutableString* mstring = [[textField text] mutableCopy];
        if([mstring length] == 0){
            //nothing in the field yet so append the replacement string
            [mstring appendString:string];

            shouldMoveToNextField = YES;
        }
        else{
            //adding a char or deleting?
            if(insertStringLength > 0){
                [mstring insertString:string atIndex:range.location];
            }
            else {
                //delete case - the length of replacement string is zero for a delete
                [mstring deleteCharactersInRange:range];
            }
        }

        //set the text now
        [textField setText:mstring];

        [mstring release];

        if (shouldMoveToNextField) {
            //
            //MOVE TO NEXT INPUT FIELD HERE
            //
        }
    }

    //always return no since we are manually changing the text field
    return NO;
}

这篇关于UITextField,自动移动到下一个1个字符后面的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-19 09:13