resignFirstResponder() 不适用于日期选择器

Posted

技术标签:

【中文标题】resignFirstResponder() 不适用于日期选择器【英文标题】:resignFirstResponder() didn't work for Date Picker 【发布时间】:2020-05-07 09:47:32 【问题描述】:

我有一个用 Swift 5 编写的非常简单的CustomIDatePicker 类,它的顶部有一个工具栏,其中包含一个“完成”按钮。问题是,按下此按钮时键盘从未缩回。我已经尝试了 4 种不同的方法,请参阅下面的详细信息:

import UIKit

class CustomDatePicker: UIDatePicker 

    var zTextField: UITextField!

    let toolbar = UIToolbar()

    convenience init(textField: UITextField) 
        self.init()

        // bar buttons
        let doneBtn = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(donePressed(sender:)))

        toolbar.sizeToFit()
        toolbar.setItems([doneBtn], animated: true)

        self.datePickerMode = .date

        // link up the Text Field
        zTextField = textField
        zTextField.inputAccessoryView = toolbar
        zTextField.inputView = self
    

    @objc func donePressed (sender: UIBarButtonItem) 
        print("done pressed") // this line appeared in the debugger

        //self.resignFirstResponder()
        //self.inputView?.resignFirstResponder()
        //self.endEditing(true)
        self.inputView?.endEditing(true) // tried all of these 4, but keyboard always remained in view
    

一个非常简单的 ViewController 来测试这个类:

class ViewController: UIViewController 

    @IBOutlet weak var theTextField: UITextField!

    override func viewDidLoad() 
        super.viewDidLoad()

        let datePicker = CustomDatePicker(textField: theTextField)
    

任何帮助将不胜感激!

【问题讨论】:

【参考方案1】:

实现 UITextField 委托函数

func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool 
  return false

@objc func donePressed (sender: UIBarButtonItem) 
        print("done pressed") 

        self.zTextField.resignFirstResponder() // new line
    

【讨论】:

以上是关于resignFirstResponder() 不适用于日期选择器的主要内容,如果未能解决你的问题,请参考以下文章

ResignFirstResponder 不工作。

resignFirstResponder 没有在 iPad 中隐藏 UIkeyboard

MonoTouch:ResignFirstResponder() 问题

点击UITableView时resignFirstResponder?

直接调用 UIResponder.resignFirstResponder 可以吗?

UITextField becomeFirstResponder 触发_resignFirstResponder