如何在Swift中禁用键盘上的"Space"键?

Dav*_*lla 11 keyboard ios swift

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

因此,每次用户按空格键时,都不会发生任何事情.我怎样才能做到这一点?我见过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
    }
}
Run Code Online (Sandbox Code Playgroud)

Kam*_*pai 19

是的,你可以做到.覆盖UITextField委托方法shouldChangeCharactersInRange.并在该方法中检查空格字符.如果发现比返回false.

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

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

编辑:更多代码

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
    }
}
Run Code Online (Sandbox Code Playgroud)

这里的textField对象是IBOutlet.这意味着文本字段控件位于故事板中并与此变量连接.

  • 这仍然允许您粘贴空格. (2认同)

Yev*_*nin 6

在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
    }
}
Run Code Online (Sandbox Code Playgroud)


Kes*_*Rai 5

Swift 4.1/4.2 Xcode 10.1

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

if string == " " {
    return false
}
return true
}
Run Code Online (Sandbox Code Playgroud)