簡體   English   中英

如何從iOS中的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:
  • 請遵循此完整指南( 我建議使用此選項)

    • 首先

    每當您設置becomeFirstResponderresignFirstResponder都是沒有必要的。

    所以刪除所有的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM