删除iPhone中的关键事件
我创建了UITextField。我只需要4个数字字符只允许该文本字段 我使用了下面的代码并得到了结果删除iPhone中的关键事件,iphone,Iphone,我创建了UITextField。我只需要4个数字字符只允许该文本字段 我使用了下面的代码并得到了结果 -(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]
-(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;
}
}
迪伦·科普兰:谢谢你的密码。它工作得很好。我的问题解决了。谢谢,没问题。很高兴我能帮忙!迪伦·科普兰:谢谢你的密码。它工作得很好。我的问题解决了。谢谢,没问题。很高兴我能帮忙!