隐藏键盘触摸滚动视图

时间:2013-02-07 01:50:09

标签: ios background uiscrollview keyboard hide

我开发了我的应用程序,之后,我发现我需要添加一个Scroll视图并在其中嵌入所有元素。 在这样做之后,我注意到键盘外面的键盘没有消失。 我知道因为IBAction绑定到ViewController而不是滚动器。 滚动条不能有任何IBAction。 有没有办法可以帮忙解决这个问题? 在添加Scroll视图后,我已经搜索了很多并且丢失了隐藏键盘的信息。这一点不应该那么复杂。

谢谢!

5 个答案:

答案 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;
}
相关问题