我开发了我的应用程序,之后,我发现我需要添加一个Scroll视图并在其中嵌入所有元素。 在这样做之后,我注意到键盘外面的键盘没有消失。 我知道因为IBAction绑定到ViewController而不是滚动器。 滚动条不能有任何IBAction。 有没有办法可以帮忙解决这个问题? 在添加Scroll视图后,我已经搜索了很多并且丢失了隐藏键盘的信息。这一点不应该那么复杂。
谢谢!
答案 0 :(得分:20)
iOS 7中最干净的方式:
scrollView.keyboardDismissMode = UIScrollViewKeyboardDismissModeInteractive;
Swift版本:
scrollView.keyboardDismissMode = .interactive
答案 1 :(得分:6)
请试试这个:
UITapGestureRecognizer *yourTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(scrollTap:)];
[scrollView addGestureRecognizer:yourTap];
[self.view addSubview:scrollView];
然后在
- (void)scrollTap:(UIGestureRecognizer*)gestureRecognizer {
//make keyboard disappear , you can use resignFirstResponder too, it's depend.
[self.view endEditing:YES];
}
* 非凡你说你必须将所有元素嵌入到scrollview中吗?这意味着你已经添加了类似uibutton的东西作为scrollview的子视图然后当你初始化uibutton时你也应该添加动作,所以在scrollTap只是[self.view endEditting:YES]是足够的因为如果你在uiscrollview中的某个点按下并且如果那个点是uibutton,它将激活uibutton的动作,因为它保留在最上面的图层中你添加它作为子视图,如果该点不是按钮,则scrollTap将激活。对不起,我没仔细看,但应该像我说的那样。
答案 2 :(得分:1)
根据@ piam的回答,这里的答案是那些想要快速复制粘贴的人的快速版本:
//put this where you initialize your scroll view
var theTap = UITapGestureRecognizer(target: self, action: "scrollViewTapped:")
scrollView.addGestureRecognizer(theTap)
//This can go anywhere in your class
func scrollViewTapped(recognizer: UIGestureRecognizer) {
scrollView.endEditing(true)
}
旁注:
确保您的文本字段设置如下:
exampleTextField.delegate = self
并在您的课程顶部添加UITextFieldDelegate
class ViewController: UIViewController, UITextFieldDelegate {
答案 3 :(得分:0)
我认为您可以为baseViewControlls视图注册UITapGestureRecognizer
,然后处理手势
- (void)handleTap:(UITapGestureRecognizer *)recognizer
{
if(yourScrollView.yourTextField.isFirstResponder)
{
[yourScrollView.yourTextField resignFirstResponder];
}
}
或者当您的键盘显示时,您可以在baseView上添加一个透明的蒙版按钮,该按钮位于键盘和yourView之间,而按钮则在接收发件人时添加如下:
- (void)maskButton:(id)sender
{
[_maskButton removeFromSuperView];
if(yourScrollView.yourTextField.isFirstResponder)
{
[yourScrollView.yourTextField resignFirstResponder];
}
}
答案 4 :(得分:0)
要立即消除触摸而不是轻按:
添加PanGestureRecognizer:
UIPanGestureRecognizer *panGR = [[UIPanGestureRecognizer alloc] initWithTarget:nil action:nil];
panGR.cancelsTouchesInView = NO;
panGR.delegate = self;
[scrollView addGestureRecognizer:panGR];
实现手势委托:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
if (touch.phase == UITouchPhaseBegan) [self.view endEditing:YES];
return NO;
}