删除iPhone中的关键事件

删除iPhone中的关键事件,iphone,Iphone,我创建了UITextField。我只需要4个数字字符只允许该文本字段 我使用了下面的代码并得到了结果 -(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]

我创建了UITextField。我只需要4个数字字符只允许该文本字段

我使用了下面的代码并得到了结果

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
   {

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];

NSNumber* candidateNumber;

NSString* candidateString = [textField.text stringByReplacingCharactersInRange:range withString:string];

range = NSMakeRange(0, [candidateString length]);

[numberFormatter getObjectValue:&candidateNumber forString:candidateString range:&range error:nil];
NSUInteger newLength = [passwordfield.text length]; 
if(newLength>=4)
{
    [passwordfield setText:[passwordfield.text substringToIndex:3]];
    UIAlertView *alert = [[UIAlertView alloc] init];
    [alert setTitle:@"Alert"];
    [alert setMessage:@"Four Characters only allowed.."];
    [alert setDelegate:self];
    [alert addButtonWithTitle:@"Ok"];
    [alert show];
}
   if (([candidateString length] > 0) && (candidateNumber == nil || range.length < [candidateString length])) 
  {
         return NO;
  }
       else 
       {
      return YES;
     }

}
-(BOOL)textField:(UITextField*)textField应更改字符范围:(NSRange)范围替换字符串:(NSString*)字符串
{
NSNumberFormatter*numberFormatter=[[NSNumberFormatter alloc]init];
[NumberFormatterSetNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber*候选编号;
NSString*candidateString=[textField.text StringByReplacingCharactersRange:range with string:string];
范围=NSMakeRange(0,[候选测试环长度]);
[numberFormatter getObjectValue:&candidateNumber for字符串:CandidateTestString范围:&range错误:nil];
nsuiger newLength=[passwordfield.text length];
如果(新长度>=4)
{
[passwordfield setText:[passwordfield.text substringToIndex:3];
UIAlertView*警报=[[UIAlertView alloc]init];
[警报集标题:@“警报”];
[警报设置消息:@“仅允许四个字符…”;
[alert setDelegate:self];
[标题为@“确定”的警报添加按钮];
[警报显示];
}
如果(([candidateString length]>0)和&(candidateNumber==nil | | range.length<[candidateString length]))
{
返回否;
}
其他的
{
返回YES;
}
}
但我的问题是,当我按delete键时,最后两个字符正在删除 同时alertview也会显示


如何解决这个问题?

您使问题变得比需要的更复杂。当用户点击退格键时,输入的
字符串
为空白字符串<代码>[NSString]。这里有一个可行的解决方案:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {   
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
    if (![numberFormatter numberFromString:string] && ![string isEqualToString:[NSString string]]) {
        return NO;
    }

    if (textField.text.length + string.length > 4) {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Alert"
                                                        message:@"Four Characters only allowed..." 
                                                       delegate:self 
                                              cancelButtonTitle:@"Ok"
                                              otherButtonTitles:nil];
        [alert show];
        [alert release];

        return NO;
    } else {
        return YES;
    }   
}

你让事情变得比需要的更复杂了。当用户点击退格键时,输入的
字符串
为空白字符串<代码>[NSString]。这里有一个可行的解决方案:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {   
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
    if (![numberFormatter numberFromString:string] && ![string isEqualToString:[NSString string]]) {
        return NO;
    }

    if (textField.text.length + string.length > 4) {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Alert"
                                                        message:@"Four Characters only allowed..." 
                                                       delegate:self 
                                              cancelButtonTitle:@"Ok"
                                              otherButtonTitles:nil];
        [alert show];
        [alert release];

        return NO;
    } else {
        return YES;
    }   
}

迪伦·科普兰:谢谢你的密码。它工作得很好。我的问题解决了。谢谢,没问题。很高兴我能帮忙!迪伦·科普兰:谢谢你的密码。它工作得很好。我的问题解决了。谢谢,没问题。很高兴我能帮忙!