ios - 将文本字段输入限制为设定长度的数字输入

标签 ios xcode swift

我试图限制 3 个不同的文本字段,以便您只能在其中输入数字,并且您可以输入的位数也受到限制。

这是我的代码:

import Foundation
import UIKit
import Darwin

class View3on3 : UIViewController, UITextFieldDelegate {


@IBOutlet weak var APTeams: UITextField!
@IBOutlet weak var APRounds: UITextField!
@IBOutlet weak var APBreakers: UITextField!


override func viewDidLoad()
{
    super.viewDidLoad()
    initializeTextFields()
}


func initializeTextFields()
{
    APTeams.delegate = self
    APTeams.keyboardType = UIKeyboardType.NumberPad

    APRounds.delegate = self
    APRounds.keyboardType = UIKeyboardType.NumberPad

    APBreakers.delegate = self
    APBreakers.keyboardType = UIKeyboardType.NumberPad
}


override func didReceiveMemoryWarning()
{
    super.didReceiveMemoryWarning()
}


@IBAction func userTappedBackground(sender: AnyObject)
{
    view.endEditing(true)
}

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool
{
    if string.characters.count == 0 {
        return true
    }

    let prospectiveText = (textField.text as NSString).stringByReplacingCharactersInRange(range, withString: String())

    switch textField {
    case APTeams:
        return prospectiveText.containsOnlyCharactersIn("0123456789") && count(prospectiveText) <= 3

    case APRounds:
        return prospectiveText.containsOnlyCharactersIn("0123456789") && count(prospectiveText) <= 1

    case APBreakers:
        return prospectiveText.containsOnlyCharactersIn("0123456789") && count(prospectiveText) <= 3

    default:
        return true
    }

}

}

它在这一行抛出错误:

let prospectiveText = (textField.text as NSString).stringByReplacingCharactersInRange(range, withString: String())

这么说 '字符串?'不可转换为 NSString

我按照这个网站上的教程进行操作: http://www.globalnerdy.com/2015/04/27/how-to-program-an-ios-text-field-that-takes-only-numeric-input-or-specific-characters-with-a-maximum-length/

我做错了什么?

PS。调用 NumberPad 的代码工作正常。当我删除限制位数的代码时,它工作正常。

最佳答案

或者您可以尝试一下,创建一个方法并在 View 加载时调用它:

func initializeTextFields({
digitsOnlyTextField.delegate = self
digitsOnlyTextField.keyboardType = UIKeyboardType.ASCIICapable

然后,您可以对文本字段进行硬编码,如下所示:

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

case digitsOnlyTextField:
return prospectiveText.containsOnlyCharactersIn("012346789")

尝试一下并向我提供一些反馈,祝你好运!

关于ios - 将文本字段输入限制为设定长度的数字输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31552674/

相关文章:

ios - Uibutton 的 titleLabel.textColor

ios - 如何判断特定模拟器使用哪个 iOS DeviceSupport 文件夹?

ios - 试图在 'App Center Listed Platforms' 中设置 iPhone 和 iPad

iphone - 在 xcode 中保存/共享字符串

swift - DispatchQueue.main.async 和 Dispatch.main.asyncAfter(.now(),{}) 之间的区别

ios - 更改 AVPlayerViewController 控件的位置

ios - 在将快速分类数据用作目标分类时未得到自动建议

ios - Unwind Segue 和多线程

ios - Swift:在 avqueueplayer 中播放完毕后重播视频

objective-c - 异常 EXC_BAD_ACCESS