正在为深圳通增加多账户保存功能,使用了一个开源库——LMDropdownView,在点击标题栏时显示用户保存的所有账号,当用户点击选中其中一项之后,将内容自动填充到输入框中。大致效果如下,看似很简单的功能,结果做出来之后点击弹出的UITableView却死活没反应:

SZTool screenshot

为了解决这个问题,昨晚搞到了两点多,好在后来还是找到了问题所在,原因很隐蔽,记录下来,希望能帮到碰到同样问题的同学。

情况是这样的,我这个页面都是让用户输入账户信息的,所以页面上基本上都是UITextField,本着人性化的作风,我做了一个处理:当用户点击空白区域时自动关闭键盘。实现代码如下:

[self.view addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideKeyboard)]];

- (void)hideKeyboard
{
    [self.view endEditing:YES];
}

问题就出在[self.view addGestureRecognizer:],因为给self.view添加了gesture recognisers,它会屏蔽由self.view添加在其上的子View的touch事件,我的弹出UITableView正是在self.view上弹出来的。

找到了问题,解决起来就很简单了,只要在弹出下来菜单时remove掉gesture recognisers,在菜单关闭的时候再加回去,就可以保证不影响原有功能的前提下也能实现新增功能了。

[self.view removeGestureRecognizer:gesture];