2016-03-30 151 views
0

我是新手,正在嘗試限制可以在文本框中輸入的字符數,以及最新版本的Swift。我試圖遵循幾個不同的教程,並檢查了網站上的幾個不同的答案,但我沒有太多運氣。限制UITextField中的字符? - Swift/Xcode

目前,我有這樣的進入了我的SWIFT文件:

@IBAction func InfoTextFieldLimit(sender: UITextField) { 

     self.InfoTextField.delegate = self 

     func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 

      let currentCharacterCount = textField.text?.characters.count ?? 0 
      if (range.length + range.location > currentCharacterCount) { 

       return false 
      } 

      let newLength = currentCharacterCount + string.characters.count - range.length 
      return newLength <= 10 
     } 
    } 

...我沒有得到任何錯誤,但似乎沒有任何要發生的事情,當我運行的應用程序。

我也嘗試了至少3種其他方法,我沒有打擾複製。 (但可以根據要求提供)

有人可以告訴我我做錯了什麼,並指出我在正確的方向嗎?將不勝感激! ......我覺得我很可能會忽視那些顯而易見的事情。

我也想用textview來做這個事情,那會怎樣呢?

+0

這裏是你的問題的鏈接別處:http://stackoverflow.com/questions/433337/set-the - 最大字符長度的uitextfield?rq = 1 – Nshweky

+0

我認爲問題是你沒有正確設置委託。什麼是IBAction方法?您可以在viewDidLoad中將「self」設置爲textfield委託。 – Surely

回答

0

我本來這段代碼在Objective-C:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 
    NSUInteger newLength = [textField.text length] + [string length] - range.length; 
    return (newLength > 4) ? NO : YES; 
} 

我試圖將其轉換爲快捷,讓我知道,如果它的工作原理...你必須使用UITextFieldDelegate方法。

func textField(textField:UITextField,shouldChangeCharactersInRange range:NSRange,replacementString string:NSString)->Bool{ 
var newLength:NSUInteger = textField.text.length + string.length - range.length 

return null(newLength > 4)?false:true 

} 
+0

我其實也沒有這樣的運氣,但是我能夠得到原來的代碼工作,我已經在我的問題中發佈多一點試驗和錯誤後發佈。我想我確實有我的委託方法設置錯誤..但是現在我遇到了另一個小問題。我在我的視圖控制器中有3個不同的文本框,我只想限制它。的字符在其中之一,而不是所有..我試過「if(textfield == MyTextField){」之後「Bool {」但現在我卡住了..我該如何做到這一點? ...謝謝您的幫助! – aspenfox

+0

對不起,我不確定我是否理解你在說什麼...兩個文本框的比較不起作用? – Nshweky

0
func textField(textField: UITextField, shouldChangeCharactersInRange range:  NSRange, replacementString string: String) -> Bool { 
    let maxLength = 50 
    guard let text = textField.text else { return true }  
    let newLength = text.characters.count + string.characters.count - range.length 
    return newLength <= maxLength 
} 

還要確保您在UITextField的委託設置爲UIViewController

+0

當你只有一個文本字段時,這很有用但是我有5個文本字段,我想限制其中的一個,所以我該怎麼辦?請幫幫我 –