【问题标题】:Dismiss Keyboard On drag拖动时关闭键盘
【发布时间】:2017-03-25 16:46:11
【问题描述】:

在我的searchController 中搜索结果后,我想在滑动/拖动时关闭键盘。

我尝试通过main.storyboard 进行操作,但没有帮助。

如果我搜索并获得许多结果,我想向下滚动,然后键盘将dismiss 让我更好地查看我的结果。如果有人可以提供帮助,那就太好了,谢谢!

现在,当我在图片中看到我的结果时,当我向下滚动时键盘会停留,这有点烦人。

我正在使用 Swift 2.3 和 Xcode 8.1

这是我的 searchController 设置以防万一:

// MARK : Search ! //

    var searchController : UISearchController!

    var resultsController = UITableViewController()

    override func viewDidLoad() {
        super.viewDidLoad()

        definesPresentationContext = true
        self.resultsController.tableView.dataSource = self
        self.resultsController.tableView.delegate = self
        self.searchController = UISearchController(searchResultsController: self.resultsController)
        self.tableView.tableHeaderView = self.searchController.searchBar
        self.searchController.searchResultsUpdater = self
        self.searchController.dimsBackgroundDuringPresentation = true
        self.searchController.searchBar.sizeToFit()
        self.searchController.searchBar.barTintColor = UIColor.blackColor()
        self.searchController.searchBar.endEditing(true)
        self.searchController.searchBar.placeholder = "חפש ברים"
        self.searchController.hidesNavigationBarDuringPresentation = false
        ////// MARK: END Of Search //////
}

编辑:pkc456 已解决。有效,但有一个小问题

最后一个结果的单元格被切成两半! :

【问题讨论】:

    标签: ios iphone swift search keyboard


    【解决方案1】:

    触摸或拖动时关闭键盘的简单方法(适用于TableView、CollectionView、ScrollView)

    【讨论】:

      【解决方案2】:

      当您使用 tableview 时,您可以使用此属性在拖动时关闭键盘。

      斯威夫特

      tableView.keyboardDismissMode = UIScrollViewKeyboardDismissMode.onDrag
      

      目标 C

      tableView.keyboardDismissMode =  UIScrollViewKeyboardDismissModeOnDrag
      

      【讨论】:

      • 不工作...如前所述,已经尝试将其应用于 main.storyboard 内的 tableView ,需要将其应用于 UISearchController 吗?
      • 需要改成:UIScrollView.KeyboardDismissMode.onDrag
      【解决方案3】:

      实现scroll view delegate 方法(scrollViewWillBeginDragging)。在这个方法resignFirstResponder你的搜索栏。也可以看this SO 回答。

      func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
              searchController.searchBar.resignFirstResponder()//self.searchBar?.endEditing(true)
          }
      

      【讨论】:

      • 你能帮我写物理代码吗?抱歉,我刚开始编码,不知道该怎么做xD
      • 我使用的是 tableViewController,所以类行中的委托是多余的,对吧?
      • 在你的情况下写这个:- class ViewController: UITableViewController, UIScrollViewDelegate 。只需实现 UIScrollviewDelegate。
      • 我收到一个错误,添加此协议是多余的。 + func 不起作用,也没有解决我的问题:\
      • 去掉这一行,只实现方法(scrollViewWillBeginDragging )。
      【解决方案4】:

      tableView.keyboardDismissMode = .onDrag

      【讨论】:

        【解决方案5】:
        • 使用轻击手势关闭键盘。试试下面给出的解决方案:

          override func viewDidLoad() {
            super.viewDidLoad()
            let tapGesture = UITapGestureRecognizer(target: self, action:      Selector("hideKeyboard"))
            tapGesture.cancelsTouchesInView = true
            tableView.addGestureRecognizer(tapGesture)
          }
          
          func hideKeyboard() {
            tableView.endEditing(true)
          }
          

        【讨论】:

        • 用户说的是“滑动/拖动”而不是“点击”,但无论如何,您都需要这样做: let tap = UITapGestureRecognizer(target: self, action: #selector(self.hideKeyboard)) tap .nu​​mberOfTapsRequired = 1 self.view.addGestureRecognizer(tap)
        【解决方案6】:

        你添加这个 UIScrollViewDelegate

        // MARK: - UIScrollViewDelegate

          func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
                if(velocity.y < 0){
        //Scroll down 
                    self.view.endEditing(true)
                }
            }
        

        【讨论】:

        • 你用的是swift 3.0还是swift 2?
        • 它确实告诉我删除_ ,但这就是真的。
        猜你喜欢
        • 2020-04-18
        • 1970-01-01
        • 2020-09-16
        • 2020-02-20
        • 2014-05-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-03
        相关资源
        最近更新 更多