从CollectionViewController中的搜索栏隐藏键盘

时间:2015-12-15 16:09:48

标签: ios iphone swift

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

基本上我得到了我的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不起作用。

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

感谢任何帮助,谢谢。

2 个答案:

答案 0 :(得分:2)

对于 Objective-c&斯威夫特,我希望它对你有用。亲爱的 的夫特 创建变量让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 *点击变量,然后在 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亲爱的检查这个解决方案。

答案 1 :(得分:1)

检查出来

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

func searchBarSearchButtonClicked(searchBar: UISearchBar) {
    searchBar.resignFirstResponder()
}