创建 UITextFieldDelegate 以限制 Swift 中的字符数
Create UITextFieldDelegate to Limit Character Count in Swift
我是代理的新手,我正在尝试使用 UITextFieldDelegate。我的目标是将此文本字段中的字符数限制为五个字符,就好像我正在创建一个邮政编码文本字段一样。
我正在使用带有文本字段的现成视图控制器,并创建了一个名为 ZipCodeDelegate.swift 的委托文件。我修改了情节提要中的文本字段,以在用户点击该字段时显示数字键盘。这是我的 viewController:
import UIKit
class ViewController: UIViewController, UITextFieldDelegate {
// MARK: Outlets
@IBOutlet weak var zipTextField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
这是我的委托文件:
import Foundation
import UIKit
class ZipCodeDelegate: NSObject, UITextFieldDelegate {
}
我不知道下一步该怎么做。我不确定如何限制文本字段的字符数,以及如何告诉视图控制器这个委托文件存在并且它应该控制所述文本字段。
使用此 UITextField
邮政编码委托和 Int
限制字符数
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if string.rangeOfCharacter(from: NSCharacterSet.decimalDigits.inverted) == nil{
let len = (textField.text?.characters.count)! + string.characters.count
if len <= 5 {
return true
}
}
return false
}
UITextField
用于检查最大字符限制的委托方法。
public func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool
{
var oldlength : Int = 0
if textField.text != nil
{
oldlength = (textField.text?.count)!
}
let replaceMentLength : Int = string.count
let rangeLength : Int = range.length
let newLength : Int = oldlength - rangeLength + replaceMentLength
return newLength <= charaterLimit || false
}
Swift 4
public class LimitedUITextField: UITextField, UITextFieldDelegate {
var maxNumber: Int = 0 {
didSet {
self.delegate = self
}
}
public func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
guard let textFieldText = self.text,
let rangeOfTextToReplace = Range(range, in: textFieldText) else {
return false
}
let substringToReplace = textFieldText[rangeOfTextToReplace]
let count = textFieldText.count - substringToReplace.count + string.count
return count <= self.maxNumber
}
}
我是代理的新手,我正在尝试使用 UITextFieldDelegate。我的目标是将此文本字段中的字符数限制为五个字符,就好像我正在创建一个邮政编码文本字段一样。
我正在使用带有文本字段的现成视图控制器,并创建了一个名为 ZipCodeDelegate.swift 的委托文件。我修改了情节提要中的文本字段,以在用户点击该字段时显示数字键盘。这是我的 viewController:
import UIKit
class ViewController: UIViewController, UITextFieldDelegate {
// MARK: Outlets
@IBOutlet weak var zipTextField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
这是我的委托文件:
import Foundation
import UIKit
class ZipCodeDelegate: NSObject, UITextFieldDelegate {
}
我不知道下一步该怎么做。我不确定如何限制文本字段的字符数,以及如何告诉视图控制器这个委托文件存在并且它应该控制所述文本字段。
使用此 UITextField
邮政编码委托和 Int
限制字符数
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if string.rangeOfCharacter(from: NSCharacterSet.decimalDigits.inverted) == nil{
let len = (textField.text?.characters.count)! + string.characters.count
if len <= 5 {
return true
}
}
return false
}
UITextField
用于检查最大字符限制的委托方法。
public func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool
{
var oldlength : Int = 0
if textField.text != nil
{
oldlength = (textField.text?.count)!
}
let replaceMentLength : Int = string.count
let rangeLength : Int = range.length
let newLength : Int = oldlength - rangeLength + replaceMentLength
return newLength <= charaterLimit || false
}
Swift 4
public class LimitedUITextField: UITextField, UITextFieldDelegate {
var maxNumber: Int = 0 {
didSet {
self.delegate = self
}
}
public func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
guard let textFieldText = self.text,
let rangeOfTextToReplace = Range(range, in: textFieldText) else {
return false
}
let substringToReplace = textFieldText[rangeOfTextToReplace]
let count = textFieldText.count - substringToReplace.count + string.count
return count <= self.maxNumber
}
}