2016-05-11 50 views
-3

输入四个字符后能快速自动隐藏键盘吗?我其实有一个隐藏键盘的代码,但用户必须点击屏幕上的任何位置。这里的代码:快速自动隐藏键盘

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    self.view.endEditing(true) 
} 

在此先感谢!

+0

请参阅http://stackoverflow.com/questions/28394933/how-do-i-check-when-a-uitextfield-changes让方法检查当前长度。如果尺寸合适,请关闭键盘。 – rmaddy

+0

可能重复[如何隐藏快捷键按下回车键?](http://stackoverflow.com/questions/24180954/how-to-hide-keyboard-in-swift-on-pressing-return-key) –

+0

@AbhinandanPratap不,这不是重复的,因为OP在按下返回键时不会询问如何关闭键盘。 – rmaddy

回答

-2

您应该使用文本框代表shouldChangeCharactersInRange类似,

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ 


if (textField.text.length == 4) { 

    [textField resignFirstResponder]; 
} 

return YES; 
} 

在斯威夫特,

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



     if textField.text?.characters.count == 4 { 

      textField.resignFirstResponder() 

     } 
    return true 
} 

希望这将有助于:)

+0

字符串没有名为length的成员。 – 123FLO321

+0

在swift中使用:textField.text?.characters.count或NSString(string:textField.text!)。长度 – 123FLO321

+0

OP在Swift中编码,不在Objective-C中。 – ozgur

-1

这为我工作:

// Outlet to textfield, editing changed 
@IBAction func textFieldEditingChanged(sender: UITextField) { 
    if sender.text?.characters.count == 4 { 
     view.endEditing(true) 
    } 
    // Optional if you don't want the user to paste in more than 4 characters 
    else if sender.text?.characters.count > 4 { 
     sender.text = nil 
    } 
} 

我也推荐你设置

textField.clearsOnBeginEditing = true 

所以textField在用户再次点击它时被清除。

+0

如果用户将超过4个字符粘贴到文本字段中,将会失败。 – rmaddy

+0

@rmaddy我不知道这是不是一件大事。反正我加了一个可选的修补程序。 – 123FLO321

0

如果我正确地得到了你的问题,考虑下面的示例代码:

import UIKit 

class ViewController: UIViewController, UITextFieldDelegate { 

    @IBOutlet weak var txtF: UITextField! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     txtF.delegate = self 
     txtF.addTarget(self, action: "textFieldDidChange:", forControlEvents: UIControlEvents.EditingChanged) 
    } 


    func textFieldDidChange(textField: UITextField) { 

     if textField == txtF { 

      if textField.text?.characters.count == 4 { 

       self.txtF.resignFirstResponder() 
      } 
     } 
    } 

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

     if textField == txtF { 

      if textField.text?.characters.count > 3 { 

       self.txtF.resignFirstResponder() 
       return false 
      } else { 

       return true 
      } 
     } else { 

      return true 
     } 
    } 
} 

有了上面的代码键盘时,文本字段有4个字符将隐藏后,如果用户再次文本框键盘上点击会弹出是用户不能够输入任何文本到textField和键盘将再次隐藏。

结果将是:

enter image description here

希望这会有所帮助。

+2

为什么这么复杂 – 123FLO321

+0

我不这么认为。 –

+0

如果用户将超过4个字符粘贴到文本字段中,则会失败。 – rmaddy

0

这里是隐藏键盘或数字键盘最简单的方法。 首先你需要一个按钮,你需要使它的screen.Send它的大小到现场的背面,其连接到IBAction.Then你的代码应该是这样的:

@IBAction func HideKeyboard(sender: AnyObject) { 
    YourKeyboardHere.resignFirstResponder() 
} 

这应该适用于所有类型的键盘。