在UIScrollView中关闭UITextField小数键盘

谷神星

我正在寻找解决问题的方法,但是所有发现的建议都行不通。

我从基于两个TextField带小数点的工作解决方案开始当我在没有回车键的情况下,轻按任意位置以关闭键盘,我成功使用了:

view.endEditing(true)

当我决定添加UIScrollView以便向上移动UITextField屏幕底部时,我的问题开始了

view.endEditing(true)不起作用,因为滚动视图覆盖了视图。我添加了一个TapGestureRecognizer,除了键盘关闭以外,其他所有功能都起作用。

TapGestureReconizer函数下,如果我在应用程序崩溃时使用resignFirstResponder则会出错:activeTextFiledAppDelegate

线程1:信号SIGABRT。

class ViewController: UIViewController, UITextFieldDelegate {

    var activeField: UITextField?

    @IBOutlet weak var textFieldTop: UITextField!
    @IBOutlet weak var textFieldBottom: UITextField!
    @IBOutlet weak var scrollView: UIScrollView!

    func textFieldDidBeginEditing(textField: UITextField) {
        activeField = textField
    }

    func textFieldDidEndEditing(textField: UITextField) {
        activeField = nil
    } 

    func registerForKeyboardNotifications() {
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWasShown:", name: UIKeyboardWillShowNotification, object: nil)
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillBeHidden", name: UIKeyboardWillHideNotification, object: nil)
    }

    func deregisterFromKeyBoardNotification() {
        NSNotificationCenter.defaultCenter().removeObserver(self, name: UIKeyboardWillShowNotification, object: nil)
        NSNotificationCenter.defaultCenter().removeObserver(self, name: UIKeyboardWillHideNotification, object: nil)
    }

    func keyboardWasShown(notification: NSNotification) {
        self.scrollView.scrollEnabled = true
        let info : NSDictionary = notification.userInfo!
        let keyboardSize = (info[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue().size
        let contentInsets : UIEdgeInsets = UIEdgeInsetsMake(0.0, 0.0, keyboardSize!.height + 20, 0.0)

        self.scrollView.contentInset = contentInsets
        self.scrollView.scrollIndicatorInsets = contentInsets

        var aRect : CGRect = self.view.frame
        aRect.size.height -= keyboardSize!.height
        if let _ = activeField
        {
            if (!CGRectContainsPoint(aRect, activeField!.frame.origin))
            {
                self.scrollView.scrollRectToVisible(activeField!.frame, animated: true)
            }
        }
        self.scrollView.scrollEnabled = false
    }

    func keyboardWillBeHidden(notification: NSNotification)
    {
        let info : NSDictionary = notification.userInfo!
        let keyboardSize = (info[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue().size
        let contentInsets : UIEdgeInsets = UIEdgeInsetsMake(0.0, 0.0, -keyboardSize!.height, 0.0)
        self.scrollView.contentInset = contentInsets
        self.scrollView.scrollIndicatorInsets = contentInsets
        self.scrollView.scrollEnabled = false
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        registerForKeyboardNotifications()
        self.textFieldBottom.delegate = self
        self.textFieldTop.delegate = self

        scrollView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: "closeKeyboard"))

    }

    func closeKeyboard() {
        activeField?.resignFirstResponder()

    }
}

我尝试了不同的解决方案,但没有一个在工作。

谷神星

我仍在寻找代码/故事板上的某些委托或其他可能缺少的部分,但花了更多时间检查我是否发现了问题。

NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillBeHidden:", name: UIKeyboardWillHideNotification, object: nil)

我忘记了原始代码中“ keyboardWillBeHidden:”末尾的“:”。因为该函数有一个参数,所以引发了异常。

现在一切正常

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在UIScrollView中关闭UITextField小数键盘

来自分类Dev

关闭键盘-iOS 7中的多个UITextField

来自分类Dev

在UITableView单元格中关闭UITextfield的键盘

来自分类Dev

自定义UITableViewCell中的UITextField-键盘不关闭

来自分类Dev

在UITableView单元格中关闭UITextfield的键盘

来自分类Dev

自定义UITableViewCell中的UITextField-键盘不关闭

来自分类Dev

要关闭UITextField键盘吗?

来自分类Dev

滑动即可关闭UITextField键盘

来自分类Dev

要关闭UITextField键盘吗?

来自分类Dev

捕获UITextField是否需要第三方键盘中的数字/小数/默认键盘吗?

来自分类Dev

UIScrollview中的UITextField

来自分类Dev

Swift UIScrollView:键盘不会以交互方式关闭

来自分类Dev

UIScrollView在键盘关闭时停止滚动

来自分类Dev

在Swift上编辑UItextfield时关闭键盘

来自分类Dev

如何关闭具有多个UITextField的键盘

来自分类Dev

UITableViewCells内部的UITextfield-关闭键盘

来自分类Dev

从presentMoviePlayerViewControllerAnimated关闭后,UITextfield不显示键盘

来自分类Dev

触摸UITextField外部时无法关闭键盘

来自分类Dev

无法关闭键盘,UITextField委托被称为OK

来自分类Dev

无法关闭键盘,UITextField委托被称为OK

来自分类Dev

在UIScrollView中滚动时禁用键盘

来自分类Dev

如何使用Java关闭appium中的键盘?

来自分类Dev

键盘不会在应用中关闭

来自分类Dev

在Android中检测关闭键盘事件

来自分类Dev

在片段中关闭软键盘

来自分类Dev

键盘关闭时从编辑文本中收听

来自分类Dev

是否可以在QLPreviewController中关闭键盘

来自分类Dev

在 iOS 通知内容扩展中关闭键盘

来自分类Dev

关闭键盘