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