Whi*_*Hat 60 uitextfield uikeyboard ios swift
我正在开发一个具有UIViewController的项目,在视图控制器上,在scrollview上有一个UIScrollView和一个UITextField.像这样:
我正试图解除键盘并在文本字段中键入一些文本后隐藏它并点击文本字段外的任何位置.我试过以下代码:
override func viewDidLoad() {
super.viewDidLoad()
self.textField.delegate = self;
}
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
self.view.endEditing(true)
}
Run Code Online (Sandbox Code Playgroud)
当我在滚动视图外面点击时它适用于我,但当我点击滚动视图时没有任何反应,键盘也不会隐藏.
点击文本域外的任何位置时有没有办法解除键盘?谢谢
Mat*_*haw 104
编辑为Swift 4
编辑:已添加@objc.虽然这不是性能的最佳选择,但在此有一个实例不应该导致太多问题,直到有更好的解决方案.
当需要与GestureRecognizer背后的项目进行交互时编辑修复.
编辑:谢谢@Rao指出这一点.补充说tap.cancelsTouchesInView = false.
这应该可以帮助你拥有多个UITextView或UITextField
创建视图控制器的扩展.这对我来说更顺畅,并且比试图使用更轻松.resignFirstResponder()
extension UIViewController
{
func setupToHideKeyboardOnTapOnView()
{
let tap: UITapGestureRecognizer = UITapGestureRecognizer(
target: self,
action: #selector(UIViewController.dismissKeyboard))
tap.cancelsTouchesInView = false
view.addGestureRecognizer(tap)
}
@objc func dismissKeyboard()
{
view.endEditing(true)
}
}
Run Code Online (Sandbox Code Playgroud)
self.setupToHideKeyboardOnTapOnView()在viewDidLoad中调用
iAn*_*rag 58
试试这个,经过测试和工作:
适用于Swift 3.0/4.0
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
self.view.endEditing(true)
}
Run Code Online (Sandbox Code Playgroud)
对于老年人斯威夫特
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent) {
self.view.endEditing(true)
}
Run Code Online (Sandbox Code Playgroud)
Gia*_*ang 17
迅捷3
override func viewDidLoad() {
super.viewDidLoad()
self.view.addGestureRecognizer(UITapGestureRecognizer(target: self.view, action: #selector(UIView.endEditing(_:))))
}
Run Code Online (Sandbox Code Playgroud)
小智 13
在这种情况下,有UITapGesture作为选择之一.为了以防万一,我尝试创建示例代码.像这样,
class ViewController: UIViewController {
@IBOutlet weak var textField: UITextField!
@IBOutlet weak var scrollView: UIScrollView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let tapGesture = UITapGestureRecognizer(target: self, action: "tap:")
view.addGestureRecognizer(tapGesture)
}
func tap(gesture: UITapGestureRecognizer) {
textField.resignFirstResponder()
}
}
Run Code Online (Sandbox Code Playgroud)
Dev*_*t10 11
适用于ScrollView的Swift 3工作解决方案
class ViewController: UIViewController {
@IBOutlet weak var textField: UITextField!
@IBOutlet weak var scrollView: UIScrollView!
override func viewDidLoad() {
super.viewDidLoad()
// The next line is the crucial part
// The action is where Swift 3 varies from previous versions
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.tap(gesture:)))
self.view.addGestureRecognizer(tapGesture)
}
func tap(gesture: UITapGestureRecognizer) {
textField.resignFirstResponder()
}
}
Run Code Online (Sandbox Code Playgroud)
关于我引用和使用的这个问题的另一个问题.接受的答案在Swift 3中不再有效.当前选择的答案应该是以下答案.
xCode 8.2.1,Swift 3
设置UITapGestureRecognizer以查看UIViewController,它将关闭键盘并使此功能成为UIView的Bool属性.
TapGestureRecognizer类
let gesture = UITapGestureRecognizer(target: tableView, action: #selector(UITextView.endEditing(_:)))
tableView.addGestureRecognizer(gesture)
Run Code Online (Sandbox Code Playgroud)
扩展UIView
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let textField = UITextField(frame: CGRect(x: 50, y: 50, width: 200, height: 30))
textField.borderStyle = .roundedRect
textField.placeholder = "Enter text"
textField.becomeFirstResponder()
view.addSubview(textField)
let gesture = UITapGestureRecognizer(target: view, action: #selector(UIView.endEditing(_:)))
view.addGestureRecognizer(gesture)
}
}
Run Code Online (Sandbox Code Playgroud)
import UIKit
class TapGestureRecognizer: UITapGestureRecognizer {
let identifier: String
init(target: Any?, action: Selector?, identifier: String) {
self.identifier = identifier
super.init(target: target, action: action)
}
static func == (left: TapGestureRecognizer, right: TapGestureRecognizer) -> Bool {
return left.identifier == right.identifier
}
}
Run Code Online (Sandbox Code Playgroud)
import UIKit
extension UIView {
private var hideKeybordOnTapIdentifier: String { return "hideKeybordOnTapIdentifier" }
private var hideKeybordOnTapGestureRecognizer: TapGestureRecognizer? {
let hideKeyboardGesture = TapGestureRecognizer(target: self, action: #selector(UIView.hideKeyboard),
identifier: hideKeybordOnTapIdentifier)
if let gestureRecognizers = self.gestureRecognizers {
for gestureRecognizer in gestureRecognizers {
if let tapGestureRecognizer = gestureRecognizer as? TapGestureRecognizer,
tapGestureRecognizer == hideKeyboardGesture {
return tapGestureRecognizer
}
}
}
return nil
}
@objc private func hideKeyboard() { endEditing(true) }
var hideKeyboardOnTap: Bool {
set {
let hideKeyboardGesture = TapGestureRecognizer(target: self, action: #selector(hideKeyboard),
identifier: hideKeybordOnTapIdentifier)
if let hideKeybordOnTapGestureRecognizer = hideKeybordOnTapGestureRecognizer {
removeGestureRecognizer(hideKeybordOnTapGestureRecognizer)
if gestureRecognizers?.count == 0 { gestureRecognizers = nil }
}
if newValue { addGestureRecognizer(hideKeyboardGesture) }
}
get { return hideKeybordOnTapGestureRecognizer == nil ? false : true }
}
}
Run Code Online (Sandbox Code Playgroud)
看一下这个.
override func viewDidLoad() {
var tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.handleTap))
self.view.userInteractionEnabled = true
self.view.addGestureRecognizer(tapGesture)
}
Run Code Online (Sandbox Code Playgroud)
然后你的点击处理程序是.
func handleTap(sender: UITapGestureRecognizer) {
self.view.endEditing(true)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
67980 次 |
| 最近记录: |