簡體   English   中英

限制 UITextField 中的字符? - 斯威夫特/Xcode

[英]Limiting Characters in UITextField? - Swift/Xcode

我是開發新手,我正在嘗試使用最新版本的 Swift 限制可以在文本字段中輸入的字符數。 我嘗試遵循幾個不同的教程,並在網站上查看了一些不同的答案,但我運氣不佳。

目前,我已將其輸入到我的 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 來做到這一點,那會有什么不同?

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

我最初在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;
}

我嘗試將它轉換為 swift,讓我知道它是否有效......你必須使用 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

}

以防萬一,在將其應用於字符串之前,請不要忘記保護范圍大小。 否則,如果用戶執行此操作,則會崩潰:

鍵入最大長度的文本插入內容(由於長度限制,將不會插入任何內容,但iOS對此一無所知)撤消插入操作(發生崩潰,原因是范圍大於實際的字符串大小)

此外,使用iOS 13用戶可能會通過手勢意外觸發此操作

我建議您將此添加到您的項目中

extension String {
    func replace(with text: String, in range: NSRange) -> String? {
        guard range.location + range.length <= self.count else { return nil }
        return (self as NSString).replacingCharacters(in: range, with: text)
    }
}

並像這樣使用它:

func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
    guard let newText = textView.text.replace(with: text, in: range) else { return false }
    return newText.count < maxNumberOfCharacters
}

否則,您將不斷崩潰於應用程序中

maxNumberOfCharacters-您的常量或@IBInspectable變量

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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