2012-10-28 111 views
0

所以我有這個UITableView包含幾行,當單擊一行時,另一個UIViewController被推送與特定的行詳細信息。我的問題是我想通過屏幕上的任何觸摸來關閉鍵盤(同樣在UITableView上),但是當我這樣做時,點擊UITableView行,鍵盤會關閉,但didSelectRow方法不起作用。一旦點擊單元格,它不會推動新的ViewController。另一種方式是,一旦我改變了它,你可以點擊TableView單元格,鍵盤消除和其他ViewController被按下,但是在任何其他地方的觸摸並不會關閉鍵盤。鍵盤關閉和UITableView觸摸問題

我該怎麼辦?

- (IBAction)hideKeyboard:(id)sender 
{ 
    [tfFoodsSearchQuery resignFirstResponder]; 
} 

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

    if ([touch.view isKindOfClass:[UITableView class]]) 
    { 
     // we touched a button, slider, or other UIControl 
     return YES; // handle the touch 
    } 
    NSLog(@"Touch"); 
    return NO; // ignore the touch 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 

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

    [self.view addGestureRecognizer:tap]; 

    UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideKeyboard:)]; 
    gestureRecognizer.delegate = self; 
    [self.tvFoods addGestureRecognizer:gestureRecognizer]; 
} 

謝謝!

+0

嘗試在'touchesBegan'方法中使用鍵盤而不是使用輕敲識別器。 – vishy

回答

2

設置

[gestureRecognizer setCancelsTouchesInView:NO]; 

和,而不是將它添加到tvFoods,加入到整個self.view,所以不會影響到覆蓋的定義。

也,取出shouldReceiveTouch代表,這是沒有必要的

1

使用whiteagle的提示,我用下面的代碼以捕獲一個水龍頭關閉鍵盤在一個UITableView。它通過水龍頭,仍然允許選擇一排。在我的情況下,通過點擊觸發一個內聯日期選擇器來顯示。

-(void)viewDidLoad { 
    UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideKeyboard)]; 
    [singleTap setNumberOfTapsRequired:1]; 
    [singleTap setNumberOfTouchesRequired:1]; 
    [singleTap setCancelsTouchesInView:NO]; 
    [self.view addGestureRecognizer:singleTap]; 
    singleTap = nil; 
    } 

    // 
    -(IBAction)hideKeyboard { 
    [activeTextField resignFirstResponder]; 
    }