2013-04-08 43 views
0

在我的ViewController中,我得到了-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath,但是这个永远不会被调用。我搜索了为什么没有被调用,我发现我用这个:textFieldShouldEndEditing在使用UITapGestureRecognizer时没有被调用

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] 
            initWithTarget:self 
            action:@selector(dismissKeyboard)]; 

    [self.view addGestureRecognizer:tap]; 

当轻拍背景时关闭键盘。任何想法如何我可以解决这个问题,这两个dismisskeyboard点击背景和didSelectRowAtIndexPath工作?

+0

实际上你的要求是什么? – 2013-04-08 09:48:45

回答

0

didSelectRowAtIndexPath永远不会被调用,因为您可能没有执行UITableViewDelegate

你应该只使用此与您控制从应答

[yourTextField resignFirstResponder]; 
+0

我确实实现了这一点。它的TapGestureRecognizer导致问题,当我删除它的作品。 – nonuma 2013-04-08 09:13:25

+0

如果你在viewContoller中有textField,那么当你点击方法里面的'resignFirstResponder'从你的文本字段 – nsgulliver 2013-04-08 09:17:12

+0

我在resmissFirstResponder中的“dismisskeyboard”方法 – nonuma 2013-04-08 09:22:31

0

尝试这样it'l帮助你辞职,

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [[event allTouches] anyObject]; 
    if(![[touch view] isKindOfClass:[UITextField class]]){ 

//resign your textfield here 
    } 

} 
+0

当我设置UITapGestureRecognizer时,didSelectRowAtIndexPath不会被调用 – nonuma 2013-04-08 09:24:55

0
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] 
           initWithTarget:self 
           action:@selector(dismissKeyboard:)]; 

[tbl addGestureRecognizer:tap]; 

-(void)dismissKeyboard:(UITapGestureRecognizer *)gestureRecognizer 
{ 
    CGPoint p = [gestureRecognizer locationInView:tbl]; 

    NSIndexPath *indexPath = [tbl indexPathForRowAtPoint:p]; 
    if (indexPath == nil) 
     NSLog(@"Resign"); 
    else 
     NSLog(@"Did select Row, %i",indexPath.row);// Do your stuff as you are doing in didSelectRow 
} 

实现此

+0

我已经实现 – nonuma 2013-04-08 09:21:48

+0

是否调用此方法? – 2013-04-08 09:22:18

+0

它确实被调用,问题在于didSelectRowAtIndexPath没有被调用 – nonuma 2013-04-08 09:25:23

0

如果你点击这个视图。你必须覆盖你委托方法shouldReceiveTouch返回NO。如果触摸发生在tableView

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { 

    // Disallow recognition of tap gestures in the segmented control. 
    if ([touch.view isDescendantOfView:self.tblView]) { 
     return NO; 
    } 
    return YES; 
} 

现在二人的委托方法将火.. Note: self.tblView是的tableView

0
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 
return TRUE; 

好吧看到你上车与一个....然后,如果它作品阅读文档中的详细解释,以便您清楚地理解。