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;
}
时间: 2025-01-07 08:12:59

tableView didSelectRowAtIndexPath方法不执行的相关文章

ios tableview didSelectRowAtIndexPath方法中,获取某个cell的实例

选中tableView的某一行,触发如下方法: -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { } 若此时需要对tableview的cell做处理,就需要先得到改行cell对应的实例,可运用如下方法: UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 或者某个自定义cell

-tableView: cellForRowAtIndexPath:方法不执行问题

今天在学习UItableView 的时候,定义了一个属性 1 @property (weak, nonatomic) NSMutableArray *dataList: 在ViewDidLoad方法方法中用一下方法实例化 1 _dataList = [NSMutableArray arrayWithCapacity:20]; 2 3 for (NSInteger i = 0; i < 20; i++) 4 5 { 6 7 Book *book = [[Book alloc]init]; 8 9

iOS开发:didSelectRowAtIndexPath:方法失效解决办法

问题描述及解决过程: 为了达到点击TableView空白区退出键盘的效果,给控制器注册了一个UITapGestureRecognizer来识别点击事件,代码如下: 1 #pragma mark - 设置手势识别器 2 3 - (void)setupGestureRecognizer 4 { 5 // 创建手势识别器对象 6 UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init]; 7 // 设置手势识别器对象的代理为

tableview 代理方法详解

typedef NS_ENUM(NSInteger, UITableViewCellAccessoryType) { UITableViewCellAccessoryNone, // 不显示任何图标 UITableViewCellAccessoryDisclosureIndicator, // 跳转指示图标 UITableViewCellAccessoryDetailDisclosureButton, // 内容详情图标和跳转指示图标 UITableViewCellAccessoryCheckm

initMethod 和 afterPropertiesSet 以及 AwareMethod方法的执行时机

在spring开发中,我们定义bean 经常会需要用到beanFactory对象,这就需要实现BeanFactoryAware这种类型的接口,它有一个setBeanFactory方法   在xml中配置bean 的时候,我们也可以指定initMethod方法   在bean类定义的时候可以实现InitializingBean,提供一个afterPropertiesSet方法的实现     以上者3中情况我们经常用到,下面来分析一下spring是如何处理这3种情况的,他们的调用时机是怎么样的?  

C# 给某个方法设定执行超时时间 C#函数运行超时则终止执行(任意参数类型及参数个数通用版)

在某些情况下(例如通过网络访问数据),常常不希望程序卡住而占用太多时间以至于造成界面假死. 在这时.我们可以通过Thread.Thread + Invoke(UI)或者是 delegate.BeginInvoke 来避免界面假死, 但是这样做时,某些代码或者是某个方法的执行超时的时间还是无法操控的.那么我们又是否有一种比较通用的方法.来设定某一个方法的执行超时的时间,让该其一旦超过指定时间则跳出指定方法.进而继续向下执行呢? 答案当然是肯定的. delegate.BeginInvoke可以实现代

Junit4学习笔记--方法的执行顺序

package com.lt.Demo.TestDemo; import java.util.Arrays; import java.util.Collection; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; im

Android中的Sqlite中的onCreate方法和onUpgrade方法的执行时机

今天在做数据库升级的时候,遇到一个问题,就是onCreate方法和onUpgrade方法的执行时机的问题,这个当时在操作的时候,没有弄清楚,很是迷糊,所以写代码的时候出现了很多的问题,所以没办法就去扒源代码看了.不过在此之前我讲解过一篇关于数据库升级的文章,但是那里没有详细的讲解一下这两个方法的执行时机,所以这里就在单独说一下 关于数据库升级的文章:http://blog.csdn.net/jiangwei0910410003/article/details/39670813 不多说,下面直接进

利用Python的unittest单元测试框架的discover方法批量执行脚本用例

1.在用Python自动化时,执行单个脚本用例那都是so easying当脚本用例不断地增多时,那就蒙蔽了,一个个来跑到什么时候才跑完,所以discover方法作用就出来,废话不多,小编直接上代码了,如有疑问,可以咨询小编 #!/usr/bin/python# -*- coding: utf-8 -*-from selenium import webdriverimport time,osfrom selenium.webdriver.common.action_chains import Ac