ish*_*r88 64 string character uitextfield ios swift
我知道还有其他主题,但我似乎无法找到如何实现它.
我试图将UITextField限制为只有5个字符
优选字母数字和 - 和.和_
我见过这段代码
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange,
replacementString string: String) -> Bool
{
let maxLength = 4
let currentString: NSString = textField.text
let newString: NSString =
currentString.stringByReplacingCharactersInRange(range, withString: string)
return newString.length <= maxLength
}
Run Code Online (Sandbox Code Playgroud)
和
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
let length = count(textField.text.utf16) + count(string.utf16) - range.length
return length <= 10
}
Run Code Online (Sandbox Code Playgroud)
我只是不知道如何实际实现它或我应该换出哪个"textfield"我的自定义命名为UITextField
Ala*_*din 108
您的视图控制器应符合UITextFieldDelegate,如下所示:
class MyViewController: UIViewController, UITextFieldDelegate {
}
Run Code Online (Sandbox Code Playgroud)设置文本字段的委托: myTextField.delegate = self
textField(_:shouldChangeCharactersInRange:replacementString:)全部一起:
class MyViewController: UIViewController,UITextFieldDelegate //set delegate to class
@IBOutlet var mytextField: UITextField // textfield variable
override func viewDidLoad() {
super.viewDidLoad()
mytextField.delegate = self //set delegate
}
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange,
replacementString string: String) -> Bool
{
let maxLength = 4
let currentString: NSString = textField.text
let newString: NSString =
currentString.stringByReplacingCharactersInRange(range, withString: string)
return newString.length <= maxLength
}
Run Code Online (Sandbox Code Playgroud)
对于Swift 4
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let maxLength = 1
let currentString: NSString = textField.text! as NSString
let newString: NSString =
currentString.replacingCharacters(in: range, with: string) as NSString
return newString.length <= maxLength
}
Run Code Online (Sandbox Code Playgroud)
仅允许将一组指定的字符输入给定的文本字段
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
var result = true
if mytextField == numberField {
if count(string) > 0 {
let disallowedCharacterSet = NSCharacterSet(charactersInString: "0123456789.-").invertedSet
let replacementStringIsLegal = string.rangeOfCharacterFromSet(disallowedCharacterSet) == nil
result = replacementStringIsLegal
}
}
return result
}
Run Code Online (Sandbox Code Playgroud)
Fat*_*tie 103
请注意,您将在网上看到的有关此问题的大部分示例代码都已过时.
只需将以下内容粘贴到项目中的任何Swift文件中即可.将文件命名为any,例如"Handy.swift"
您的文本字段现在有一个.maxLength.
在开发期间在storyboard中设置该值是完全可以的,或者在应用程序运行时将其设置为代码.
// simply have this in any Swift file, say, Handy.swift
import UIKit
private var __maxLengths = [UITextField: Int]()
extension UITextField {
@IBInspectable var maxLength: Int {
get {
guard let l = __maxLengths[self] else {
return 150 // (global default-limit. or just, Int.max)
}
return l
}
set {
__maxLengths[self] = newValue
addTarget(self, action: #selector(fix), for: .editingChanged)
}
}
func fix(textField: UITextField) {
let t = textField.text
textField.text = t?.prefix(maxLength)
}
}
Run Code Online (Sandbox Code Playgroud)
就这么简单.
(注意:"safelyLimitedTo #length"只是一个调整String长度的调用.所有Swift程序员都有自己的扩展,或者,只使用我在那里看到的.)
以上修复了项目中的所有文本字段.
如果您只想将一个特定的文本字段简单地限制为"4",那就是......
class PinCodeEntry: UITextField {
override func didMoveToSuperview() {
super.didMoveToSuperview()
addTarget(self, action: #selector(fixMe), for: .editingChanged)
}
@objc private func fixMe() { text = text?.prefix(4) }
}
Run Code Online (Sandbox Code Playgroud)
唷!这里的所有都是它的.
(顺便说一句,这是一个与UIText View相关的非常有用的提示, https: //stackoverflow.com/a/42333832/294884 )
Сер*_*лык 18
Swift 4,只需使用:
public func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
return range.location < 10
}
Run Code Online (Sandbox Code Playgroud)
Pav*_*los 10
Steven Schmatz使用Swift 3.0的方式与此相同:
//max Length
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange,
replacementString string: String) -> Bool
{
let maxLength = 4
let currentString: NSString = textField.text! as NSString
let newString: NSString = currentString.replacingCharacters(in: range, with: string) as NSString
return newString.length <= maxLength
}
Run Code Online (Sandbox Code Playgroud)
Ash*_*han 10
对于 Swift 5:
只需写一行来设置最大字符长度:
self.textField.maxLength = 10
Run Code Online (Sandbox Code Playgroud)
欲了解更多详情,请点击此处
信用:http : //www.swiftdevcenter.com/max-character-limit-of-uitextfield-and-allowed-characters-swift/
我认为扩展对此更为方便.在这里看到完整答案
private var maxLengths = [UITextField: Int]()
// 2
extension UITextField {
// 3
@IBInspectable var maxLength: Int {
get {
// 4
guard let length = maxLengths[self] else {
return Int.max
}
return length
}
set {
maxLengths[self] = newValue
// 5
addTarget(
self,
action: #selector(limitLength),
forControlEvents: UIControlEvents.EditingChanged
)
}
}
func limitLength(textField: UITextField) {
// 6
guard let prospectiveText = textField.text
where prospectiveText.characters.count > maxLength else {
return
}
let selection = selectedTextRange
// 7
text = prospectiveText.substringWithRange(
Range<String.Index>(prospectiveText.startIndex ..< prospectiveText.startIndex.advancedBy(maxLength))
)
selectedTextRange = selection
}
}
Run Code Online (Sandbox Code Playgroud)
不使用委托的简单解决方案:
TEXT_FIELD.addTarget(self, action: #selector(editingChanged(sender:)), for: .editingChanged)
@objc private func editingChanged(sender: UITextField) {
if let text = sender.text, text.count >= MAX_LENGHT {
sender.text = String(text.dropLast(text.count - MAX_LENGHT))
return
}
}
Run Code Online (Sandbox Code Playgroud)
我的 Swift 4 版本 shouldChangeCharactersIn
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange,
replacementString string: String) -> Bool {
guard let preText = textField.text as NSString?,
preText.replacingCharacters(in: range, with: string).count <= MAX_TEXT_LENGTH else {
return false
}
return true
}
Run Code Online (Sandbox Code Playgroud)