tableView didSelectRowAtIndexPath方法不执行

最近做了一个登陆的页面,该页面主要有输入用户名,密码

为了方便用户有多个账号登陆,其实~~也是为了方便我们开发人要,可以避免每次输入一大串手机号。

对于每次登陆成功后,将手机号保存到NSUserDefault中,注意它支持的类型有:NSNumber(NSInteger、float、double),NSString,NSDate,NSArray,NSDictionary,BOOL.

-(void)saveUserMobile:(NSString *)mobile
{
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

    NSMutableArray *mobileArray = [NSMutableArray arrayWithArray:[userDefaults objectForKey:@"mobileArray"]];
    
    if(![mobileArray containsObject:mobile])
    {
        [mobileArray addObject:mobile];
        
        NSArray *newArray = [[NSArray arrayWithArray:mobileArray] sortedArrayUsingSelector:@selector(compare:)];
        [userDefaults setObject:newArray forKey:@"mobileArray"];
    }
}

使用如下网址中的第三方,UITextField下拉填充类,https://github.com/keyf/AutocompletionTableView

然后遇到一个特别奇怪的问题,无论如何点击UITableView,怎么都没办法响应这个点击的动作

一开始以为是代码的问题,是不是被遮住了,没有找到问题。后来查找了相关资料,问题在于,我在登陆这个页面,使用了 UITapGestureRecognizer,为了让用户点击空白区域,可以隐藏输入键盘,而这个事件,挡住了UITableView 中的 didSelectRowAtIndexPath,解决办法,首先是在登陆界面的文件中,加入<UIGestureRecognizerDelegate>,并重写其中的shouldReceiveTouch方法

    UITapGestureRecognizer *gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hidenKeyboard)];
    gesture.delegate = self;
    gesture.numberOfTapsRequired = 1;
    [self.view addGestureRecognizer:gesture];

#pragma mark - UIGestureRecognizerDelegate
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    // 输出点击的view的类名
    NSLog(@"^ 1 1^^%@", NSStringFromClass([touch.view class]));
    
    // 若为UITableViewCellContentView(即点击了tableViewCell),则不截获Touch事件
    if ([NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"]) {
        return NO;
    }
    return  YES;
}
posted @ 2016-07-19 17:15  elsonpeng  阅读(712)  评论(0编辑  收藏  举报