2012-07-30 38 views
6

Tôi đã tìm kiếm hàng giờ trên Google và Stackoverflow, đã thử chúng nhưng không có may mắn.Làm thế nào để gọi phương thức didSelectRowAtIndexPath với UITapGestureRecognizer?

Tôi có một UITableView tblDepartment và một UISearchBar studentSearch phía trên nó.

tôi thêm một UITapGestureRecognizer để bỏ qua bàn phím từ studentSearch textbox khi người dùng khai thác bên ngoài hộp tìm kiếm:

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

- (void)hideKeyboard 
{ 
    [studentSearch resignFirstResponder]; 
} 

Sau đó, phương pháp didSelectRowAtIndexPath:(NSIndexPath *)indexPath không được gọi nữa khi tôi chọn hàng trong tblDepartment. Tôi biết gestureRecognizer là lý do.

Vì vậy, làm cách nào tôi có thể ẩn bàn phím và vẫn cho phép người dùng chọn hàng?

Tôi đã thử mã này, nhưng nó đã không làm việc:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch 
{ 
    if ([touch.view isDescendantOfView:tblDepartment]) { 
     return NO; 
    } 
    return YES; 
} 
+0

Bạn có thể xóa trình nhận dạng cử chỉ và từ bỏ người trả lời đầu tiên từ 'tableView: didSelectRowAtIndexPath:' thay thế? – dasblinkenlight

+1

Thử xóa trình nhận dạng cử chỉ của bạn sau khi 'resignFirstResponder' – ohr

+0

@dasblinkenlight: Cảm ơn bạn đã bình luận. 'TblDepartment' có khoảng 7 hàng và bàn phím chồng lên nhau khi hiển thị. Tôi muốn người dùng có thể chọn hàng nếu họ không muốn tìm kiếm :) Vì vậy, khi họ nhấn vào bên ngoài hộp tìm kiếm, bàn phím bị loại bỏ và họ có thể chọn các hàng dưới cùng. –

Trả lời

14

thiết lập thuộc tính cử chỉ recognizer cancelsTouchesInView để NO, nó là YES theo mặc định, nó ngăn chặn chạm từ đạt các quan điểm cơ bản nếu GR nhận ra cử chỉ của nó .

+1

Giải pháp tuyệt vời. Cảm ơn bạn. '[gestureRecognizer setCancelsTouchesInView: NO];' và nó hoạt động! –

+0

Cảm ơn bạn thực sự bạn đã tiết kiệm thời gian của tôi :) Tôi đã viết như thế này tap.cancelsTouchesInView = NO; –

Các vấn đề liên quan