虽然我的问题似乎很容易解决,但我不能自己做。
基本上我得到了我的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
不起作用。
我可以在这里看到逻辑,但是找不到任何不破坏集合视图的修复是不可能的。
感谢任何帮助,谢谢。
答案 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()
}