Ios 我如何禁用;“空间”;用Swift键在键盘上?

Ios 我如何禁用;“空间”;用Swift键在键盘上?,ios,swift,keyboard,Ios,Swift,Keyboard,我正在创建一个登录系统,我不希望用户名字段中允许有空格。我不想检查和验证字段,而是想阻止添加空格 因此,每次用户按下空格键时,都不会发生任何事情。我该怎么做? 我见过Instagram这样做 这是我目前的代码: import UIKit class ViewController: UIViewController, UITextFieldDelegate { @IBOutlet weak var signUp: UIBarButtonItem! @IBOutlet weak

我正在创建一个登录系统,我不希望用户名字段中允许有空格。我不想检查和验证字段,而是想阻止添加空格

因此,每次用户按下空格键时,都不会发生任何事情。我该怎么做? 我见过Instagram这样做

这是我目前的代码:

import UIKit

class ViewController: UIViewController, UITextFieldDelegate {

    @IBOutlet weak var signUp: UIBarButtonItem!
    @IBOutlet weak var navBar: UINavigationBar!
    @IBOutlet weak var UsernameText: UITextField!


    override func viewDidLoad() {
        super.viewDidLoad()

             self.navigationController?.navigationBar.clipsToBounds = true
        UsernameText.attributedPlaceholder = NSAttributedString(string:"TypeYourUsername",
            attributes:[NSForegroundColorAttributeName: UIColor.whiteColor()])

        func textField(UsernameText: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
            if (string == " ") {
                return false
            }
            return true
        }
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    override func viewWillAppear(animated: Bool) {
        UsernameText.becomeFirstResponder()
    }


    override func prefersStatusBarHidden() -> Bool {
        return true
    }
}

是的,你能做到。重写
UITextField
委托方法
shouldChangeCharactersInRange
。在该方法中,检查空格字符。如果发现,则返回false

注意:不要忘记为textfield设置委托

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
    if (string == " ") {
        return false
    }
    return true
}
编辑:更多代码

class ViewController : UIViewController, UITextFieldDelegate {

    @IBOutlet weak var textField : UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()
        textField.delegate = self
    }

    func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
        if (string == " ") {
          return false
        }
        return true
    }
}
这里的
textField
对象是一个IBOutlet。这意味着文本字段控件位于序列图像板中,并与此变量连接。

在Swift 2.0中

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
    let whitespaceSet = NSCharacterSet.whitespaceCharacterSet()
    let range = string.rangeOfCharacterFromSet(whitespaceSet)
    if let _ = range {
        return false
    }
    else {
        return true
    }
}

在Swift 2.1中

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
    let whitespaceSet = NSCharacterSet.whitespaceCharacterSet()
    if let _ = string.rangeOfCharacterFromSet(whitespaceSet) {
       return false
       }
    return true
}

Swift 3

class SignUpViewController: UIViewController, UITextFieldDelegate {

lazy var emailTextField: UITextField = {
    let tf = UITextField()
    tf.translatesAutoresizingMaskIntoConstraints = false
    tf.placeholder = "Email address"
    tf.delegate = self
    return tf
}()

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    let whitespaceSet = NSCharacterSet.whitespaces

    if let _ = string.rangeOfCharacter(from: whitespaceSet) {
        return false
    }
    else {
        return true
    }
}
}

Swift 4.1/4.2/5.0/5.1/5.2

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

if string == " " {
    return false
}
return true
}

Swift 4.1

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
    let whitespaceSet = NSCharacterSet.whitespaceCharacterSet()
    if let _ = string.rangeOfCharacterFromSet(whitespaceSet) {
       return false
       }
    return true
}
只需简单的一行代码,就可以阻止空白

class ViewController : UIViewController, UITextFieldDelegate {

    @IBOutlet weak var textField : UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()
        textField.delegate = self
    }

    func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
        if (string == " ") {
          return false
        }
        return true
    }
}
用于所有文本字段

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

        textField.text = textField.text?.replacingOccurrences(of: " ", with: "")
        return true
    }
用于单个文本字段

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

    if textField == txtid
    {
        textField.text = textField.text?.replacingOccurrences(of: " ", with: "")
    }
    return true
}

在这里,您可以禁用空白,直到(第一个字符)文本输入。(有些改进)

在这里,您可以使用此扩展来修剪空白。(即使在检查验证时) 使用上面的textfield委托,您可以禁用空白,但如果有如下字符串

 Example : "MyName Surname             "  
因此,在保存此数据之前也可以修剪端点空间

    extension String {
        var isBlankByTrimming: Bool {
            let trimmed = self.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)
            return trimmed.isEmpty
        } 
       func trimWhitespacesAndNewlines() -> String{
              return self.trimmingCharacters(in: 
                                CharacterSet.whitespacesAndNewlines)
        }
     }
供使用::

let yourString = "MyName Surname          " 
let finalString = yourString.trimWhitespacesAndNewlines()

Swift 5

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    return string != " "
}

这是我最容易理解的语法。

谢谢您的回复。但是仍然不起作用,我把上面的代码粘贴到我的问题中。空格键仍然是在twext字段中生成空格。再次感谢@Kampaithis仍然允许您在空间中粘贴。谢谢!这节省了我的时间。