我想创建一个 PIN 码对话,就像您可以在 iPhone 上打开的对话一样。
对于那些没有看过它的人来说,它由四个盒子和一个数字键盘组成。当您输入数字时,第一个框中会出现一个点。等等。当您点击删除按钮时,最后一个点将被删除。
我将其设置为四个 UITextFields,并在我的委托(delegate)中监听:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
[self performSelector:@selector(pickNext:) withObject:textField afterDelay:0.0];
return YES;
}
pickNext: 方法将切换到下一个 UITextField,如下所示:
- (void)pickNext:(UITextField*)textField
{
switch ([textField tag]) {
case 1:
[pin2 becomeFirstResponder];
break;
case 2:
[pin3 becomeFirstResponder];
break;
case 3:
[pin4 becomeFirstResponder];
break;
case 4:
[textField resignFirstResponder];
break;
default:
break;
}
}
这确实有效,但对我来说问题是当 UITextField 已经为空时删除键不会产生任何通知。所以我没有办法移动到之前的 UITextField。
那么有没有人对如何解决这个问题有更好的建议。我在想隐藏文本字段...??
最佳答案
好的,所以我自己解决了。隐藏的文本字段是正确的选择。即使它是隐藏的,您仍然可以将其设置为第一响应者,并且键盘将会弹出。
总结一下:
在viewDidLoad中:
[hidden becomeFirstResponder];
然后我监听“Editing Changed”事件并用每个字符更新四个可见的 UITextField。像这样:
- (IBAction)textChanged:(UITextField*)hiddenField
{
NSString *hiddenText = hiddenField.text;
[self setOneTextField:pin1 toString:hiddenText atIndex:0];
[self setOneTextField:pin2 toString:hiddenText atIndex:1];
[self setOneTextField:pin3 toString:hiddenText atIndex:2];
[self setOneTextField:pin4 toString:hiddenText atIndex:3];
}
- (void)setOneTextField:(UITextField*)textField toString:(NSString*)string atIndex:(NSInteger)index
{
if ([string length] > index)
textField.text = [string substringWithRange:NSMakeRange(index, 1)];
else
textField.text = @"";
}
为了将隐藏 UITextField 中的字符数限制为四个字符,我实现了委托(delegate)方法“shouldChangeCharactersInRange”:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
bool okToEdit = YES;
if (range.location > 3)
{
okToEdit = NO;
} else if (range.location == 3) {
[self performSelector:@selector(sendPinCodeNotification) withObject:nil afterDelay:0.0];
}
return okToEdit;
}
- (void)sendPinCodeNotification
{
[[NSNotificationCenter defaultCenter] postNotificationName:PINCODE_NOTIFICATION object:[NSString stringWithFormat:@"%@%@%@%@", pin1.text, pin2.text, pin3.text, pin4.text]];
}
正如您所看到的,当输入第四个数字时,我会发送通知。
关于iphone - 创建 pin 码对话,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1318768/