gpt4 book ai didi

delegates - UITextField,1个字符后自动移至下一个

转载 作者:行者123 更新时间:2023-12-02 19:15:10 25 4
gpt4 key购买 nike

场景:我有 4 个 UITextField,仅接受 1 个字符。简单。

问题:输入 1 个字符后,我希望下一个 TextField 自动变为事件状态,而不必按下一个(即我正在使用 UIKeyboardTypeNumberPad,并且没有 NEXT 按钮。(我知道我实际上可以创建下一个)以编程方式按钮,但我不想走那么远,只需要输入 1 个字符后下一个字段自动变为事件状态。

#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;
}

最佳答案

我通过修改在这里找到的一些代码找到了解决方案: http://www.thepensiveprogrammer.com/2010/03/customizing-uitextfield-formatting-for.html

首先将您的 View Controller 设置为文本字段的委托(delegate)。

然后做这样的事情:

- (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;
}

关于delegates - UITextField,1个字符后自动移至下一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2129593/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com