1. 程式人生 > >限制UITextField 輸入文字的長度

限制UITextField 輸入文字的長度

監聽textField文字變化的事件

1、實現UITextFieldDelegate協議;
2、實現textField:shouldChangeCharactersInRange:replacementString:方法;

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
    int pMaxLength = 11;
    NSInteger strLength = textField.text.length - range.length + string.length;
    //輸入內容的長度 - textfield區域字元長度(一般=輸入字元長度)+替換的字元長度(一般為0)
    return (strLength <= pMaxLength);
}

如上程式碼,如果我們簡單的這樣寫: if(range.location<=11) return  或是 if (textfield.text.length>=11) 這樣雖然也能限制位數為11位,但是如果通過放大鏡把游標切換到之前的位數後,你照樣可以輸入,並且還會導致輸入11位後,鍵盤上的退格(X鍵)無法使用,原因是:我們在location到達11位後,返回了NO,鍵盤無法相應:新增,修改,刪除。這是很嚴重的。所以照著我上面的。

方法解讀:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
功能:
    把textField中位置為range的字串替換為string字串;
  此函式在textField內容被修改時呼叫;
返回值:
  YES,表示修改生效;NO,表示不做修改,textField的內容不變。
引數說明:
  textField:響應UITextFieldDelegate協議的UITextField控制元件。
  range:    UITextField控制元件中游標選中的字串,即被替換的字串;
        range.length為0時,表示在位置range.location插入string。
  string:    替換字串; string.length為0時,表示刪除。