将手势识别器添加到tableView标头不起作用?

问题描述:

我知道,一个“表视图头”(表视图的最*的一部分)是一个查看 所以我尝试将UITapGestureRecognizer添加到它,但它不工作...将手势识别器添加到tableView标头不起作用?

代码很简单:

- (void)tap:(UITapGestureRecognizer *)recognizer 
{ 
    // do something 
} 

UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)]; 
[self.tableView.tableHeaderView addGestureRecognizer:recognizer]; 

这里的任何提示要小心吗?非常感谢

+1

你在哪儿打电话给这段代码? –

+0

您是否在init或viewDidLoad或其他地方调用它? –

下面是对我的作品的东西: 而是添加此:

self.tableView.tableHeaderView 

我上实现代码如下每个的UILabel添加手势识别。

-(UIView*)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 
{ 

    UILabel *headerLabel = [[UILabel alloc]init]; 
    headerLabel.tag = section; 
    headerLabel.userInteractionEnabled = YES; 
    headerLabel.backgroundColor = [UIColor greenColor]; 
    headerLabel.text = [NSString stringWithFormat:@"Header No.%d",section]; 
    headerLabel.frame = CGRectMake(0, 0, tableView.tableHeaderView.frame.size.width, tableView.tableHeaderView.frame.size.height); 


    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(catchHeaderGesture:)]; 
    tapGesture.cancelsTouchesInView = NO; 
    [headerLabel addGestureRecognizer:tapGesture]; 

    return headerLabel; 

    //return nil; 
} 

-(void)catchHeaderGesture:(UIGestureRecognizer*)sender 
{ 
    UILabel *caughtLabel = (UILabel*)sender.view; 

    NSLog(@"header no : %d", caughtLabel.tag); 
} 

我希望有帮助。

+0

'tableView.tableHeaderView'与'viewForHeaderInSection'不一样:' –

+0

只要你使用'obj.userInteractionEnabled = YES',那么它就可以工作。我用'tableView.tableHeaderView'来使用它 –

所有 首先请确保您调用viewDidLoad中或该代码段viewWillAppear中

UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)]; 
[self.tableView.tableHeaderView addGestureRecognizer:recognizer]; 

其次,请确保

self.tableView.tableHeaderView 

不为空,加

NSLog([self.tableView.tableHeaderView description]); 

并检查控制台的输出

我只是想你的代码和丝锥收到正确

+2

谢谢,我的tableView头部视图是一个“UILabel”。我添加了“NSLog([self.tableView.tableHeaderView description]);”到我的代码,它不工作仍然....但我发现,在控制台中,有一些像“userInteractionEnabled = NO”。然后我将一行代码添加到该标签:“label.userInteractionEnabled = YES”,最后它可以工作!你知道原因吗? :-) – joshz

+2

@joshz:这是因为UILabel上的用户交互默认是禁用的。 – user523234

+0

对于uiimageview也是如此 – baskInEminence