【问题标题】:becomeFirstResponder does not work in viewWillAppearbecomeFirstResponder 在 vi​​ewWillAppear 中不起作用
【发布时间】:2021-05-16 08:30:53
【问题描述】:

我在navigationItem.titleView 中使用UISearchController

这里的目标是我可以输入我的搜索词,当我点击搜索时,我将被推送到一个新的UIViewController。当我返回到之前的UIViewController 时,我希望UITextField 键盘在我之前输入的文本旁边的光标处可见。

我在viewWillAppear 中调用它,但它没有显示键盘。我的UISearchController 在设计方面进行了更新,我输入的文本可见,但我必须再次点击UITextField 才能显示键盘并显示光标。

我在viewDidAppear也试过这个,体验一样。

更新:

当我在viewDidAppear 中调用执行选择器时,键盘会为我显示。

这是我尝试过的:

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        
        // A check to see if I need to display the keyboard.
        if hasSearchedText {
            DispatchQueue.main.async {
                self.searchController?.searchBar.perform(#selector(self.becomeFirstResponder), with: nil, afterDelay: 0.1)
            }
        }
    }

    override func viewWillAppear(_ animated: Bool) {
            super.viewWillAppear(animated)
                                
            // I've tried removing this & moving it to viewDidAppear but same result.
            searchController?.isActive = true
            
            searchController?.searchBar.showsCancelButton = true
            
            let textFieldInsideSearchBar = searchController?.searchBar.value(forKey: "searchField") as? UITextField
            
            if let typedValue = UserDefaults.standard.value(forKey: "xyz") as? String {
                textFieldInsideSearchBar?.text = typedValue
                
                // resetting this value
                UserDefaults.standard.removeObject(forKey: "xyz")
                UserDefaults.standard.synchronize()
            }
            textFieldInsideSearchBar?.tintColor = // color
            textFieldInsideSearchBar?.layer.borderColor = // color
            textFieldInsideSearchBar?.layer.borderWidth = 2.0
            textFieldInsideSearchBar?.layer.cornerRadius = 8.0
            textFieldInsideSearchBar?.textColor = // color
            textFieldInsideSearchBar?.font = // font
    }

【问题讨论】:

  • 您是否尝试过 viewDidAppear 中的代码?
  • 是的,同样的经历
  • 放入主队列
  • 仍然无法正常工作。在主队列中添加了我尝试过的 2 个新东西。
  • 这一行应该关闭键盘 "self.view.becomeFirstResponder()" 删除它

标签: swift uitextfield uisearchcontroller becomefirstresponder


【解决方案1】:

您需要在下一个运行循环中调用becomeFirstResponder 上的search bar,如下所示:

override func viewDidAppear(_ animated: Bool) {
       super.viewDidAppear(animated)

       DispatchQueue.main.async {
           self.searchController.searchBar.becomeFirstResponder()
       }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多