[英]How to prevent user not to remove particular character in UITextField?
[英]How double or unexpected character remove from UITextField in iOS
我正在研究UITextField及其委托。 如果我使用兩個文本字段,則可以輕松辭職第一個文本字段,也可以轉到第二個文本字段。 但是,當我清空第二個文本字段時,這意味着當字符范圍為零時,我可以轉到第一個文本字段。 但是,當我按回車鍵,然后辭職第一個文本字段並轉到第二個文本字段。 但是,當我想在這里寫一個額外的字符時,會有一個問題。 下面是我的代碼
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
if (textField.tag == 0) {
firstTextLabel.text = newString;
}else if(textField.tag == 1){
if([textField.text.length] == 0){
[secondTextField resignFirstResponder];
[firstTextField becomeFirstResponder];
}
secondTextLabel.text = newString;
}
return YES;
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField{
if (textField.tag == 0) {
[firstTextField resignFirstResponder];
[secondTextField becomeFirstResponder];
}else if(textField.tag == 1){
[secondTextField resignFirstResponder];
[thirdTextField becomeFirstResponder];
}
return YES;
}
請閱讀NSResponder.becomeFirstResponder的文檔:
使用NSWindow的makeFirstResponder:方法(而不是此方法)使對象成為第一響應者。 切勿直接調用此方法。
該錯誤是因為您正在設置firstTextLabel.text = newString;
然后在代碼末尾return YES
。
你必須選擇
return YES;
在textField shouldChangeCharactersInRange:
請遵循此完整指南( 我建議使用此選項) :
每當您設置becomeFirstResponder
, resignFirstResponder
都是沒有必要的。
所以刪除所有的resignFirstResponder
第二:如果您有多個文本字段,例如100個文本字段,且所有標簽的標記從1到100,這是我編寫的用於處理誰成為第一響應者的代碼。
- (BOOL)textFieldShouldReturn:(UITextField *)textField { NSInteger tag = textField.tag; UITextField *nextTextfield = (UITextField *)[self.view viewWithTag:tag+1]; [nextTextfield becomeFirstResponder]; return NO; }
第三:
更改:
if (textField.tag == 0) { firstTextLabel.text = newString; }
至:
if (textField.tag == 0) { return YES; }
第四
更改:
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string]; if (textField.tag == 0) { firstTextLabel.text = newString; }else if(textField.tag == 1){ if([textField.text.length] == 0){ [secondTextField resignFirstResponder]; [firstTextField becomeFirstResponder]; } secondTextLabel.text = newString; } return YES;
至:
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string]; if(textField.tag == 1){ if([textField.text.length] == 0){ [firstTextField becomeFirstResponder]; } return YES; } return YES;
如果你有任何問題隨時問。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.