【问题标题】:Hide keyboard from search bar in CollectionViewController从 UICollectionViewController 的搜索栏中隐藏键盘
【发布时间】:2015-12-15 16:09:47
【问题描述】:

虽然我的问题似乎很容易解决,但我不能自己解决。

基本上,我得到了包含我所有数据的 CollectionViewController,并且我在其中包含了一个搜索栏,该搜索栏根据用户所写的内容过滤我的收藏中的项目。

当用户点击任何项目时,它会将他们引导至另一个视图,依此类推。

当用户点击搜索栏时,键盘会显示出来,我想在用户决定点击其他地方时隐藏它。

虽然我可以做到这一点,但事实证明,每次我用我找到的方法隐藏键盘时,它也会阻止用户进一步进入我的应用程序,事实上在点击后不再可能进入另一个视图他们。

这就是我所做的:

我的 CollectionViewController.swift

override func viewDidLoad() {
        super.viewDidLoad()

        // Setup search bar/collection view
        self.collectionView?.dataSource = self
        searchBar.delegate = self
        searchBar.sizeToFit()
        searchBar.placeholder = "Search"
        navigationItem.titleView = searchBar

        let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "dismissKeyboard")
        view.addGestureRecognizer(tap)
    }

func dismissKeyboard() {

       searchBar.resignFirstResponder()
    }

我也尝试了很多发现here的东西,但都没有成功。不知何故,即使我在我的文件中包含了 UIGestureRecognizerDelegate,当我点击某个地方时,其中列出的一些委托也不会被触发。例如委托gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool 不起作用。

我可以看到这里的逻辑,但是不可能找到任何不破坏集合视图的修复。

感谢您的帮助,谢谢。

【问题讨论】:

  • 尝试使用view.endEditing(true) 而不是searchBar.resignFirstResponder()。它可能会起作用。
  • 不幸的是,它也是如此。我的视图之间的转换是连续的,当你添加一个手势识别器时它会以某种方式中断吗?
  • 亲爱的@CroiSciento 我已经为您的问题发布了解决方案。

标签: ios iphone swift


【解决方案1】:

请为 Objective-c 和 Swift 使用以下解决方案,希望它对你有用,亲爱的 斯威夫特 创建变量 let tap = UITapGestureRecognizer() 并在 viewDidLoad 方法中编写以下代码。

NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillShow:"), name:UIKeyboardWillShowNotification, object: nil);
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillHide:"), name:UIKeyboardWillHideNotification, object: nil);
}

并粘贴下面的代码以进一步实现方法:

func keyboardWillShow(notification: NSNotification) {

tap = UITapGestureRecognizer(target: self, action: "dismissKeyboard")
view.addGestureRecognizer(tap)
} 
func keyboardWillHide(notification: NSNotification) {
    view.removeGestureRecognizer(tap)
}

(Objective-c) 首先创建 UITapGestureRecognizer *tap 变量并在 viewDidLoad 方法中粘贴下面的代码。

//Notifications for keyBoardShow and keyBoradHide 
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(keyboardWillShow:)
                                             name:UIKeyboardWillShowNotification
                                           object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(keyboardWillHide:)
                                             name:UIKeyboardWillHideNotification
                                           object:nil];

并粘贴以下代码:

- (void)keyboardWillShow:(NSNotification *)notif {
//Add tap gesture here
tap = [[UITapGestureRecognizer alloc]
                               initWithTarget:self
                               action:@selector(dismissKeyboard)];

[self.view addGestureRecognizer:tap];
}
- (void)keyboardWillHide:(NSNotification *)notif {
  //Remove tap gesture
  [self.view removeGestureRecognizer:tap];
}
-(void)dismissKeyboard {
   [yourSearchBar resignFirstResponder];
}

@CroiSciento 亲爱的检查这个解决方案。

【讨论】:

    【解决方案2】:

    看看这个

    override func scrollViewWillBeginDragging(scrollView: UIScrollView) {
        searchBar.resignFirstResponder()
    }
    
    func searchBarSearchButtonClicked(searchBar: UISearchBar) {
        searchBar.resignFirstResponder()
    }
    

    【讨论】:

      猜你喜欢
      • 2011-03-08
      • 1970-01-01
      • 2013-06-02
      • 1970-01-01
      • 1970-01-01
      • 2020-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多