2012-02-29 24 views
6

Tôi gặp sự cố khi đặt bàn phím trong ứng dụng iPhone của mình để biến mất vì UIView ngay cả khi thực hiện bộ điều khiển không thể chạm được vì thực tế là tôi có UITableView chiếm phần còn lại của màn hình có sẵn.Làm cách nào để từ chứcFirstResponder khi tôi nhấp vào bên ngoài UITextField trên UITableView

Tôi đã tò mò muốn biết làm thế nào tôi sẽ từ chức bàn phím aka firstResponder bằng cách nhấp vào UITableView? Có cách nào để theo dõi sự kiện chạm trên UITableView ngay cả khi không chọn một ô có thể nhấp.

Về cơ bản, tôi biết cách từ chức bàn phím nếu ô đó kích hoạt sự kiện nhưng nếu tôi nhấp vào một phần không thể nhấp của UITableView, tôi vẫn muốn bàn phím biến mất.

Trả lời

6

2 lựa chọn:

  • Trong viewController, trả lời cuộc gọi lại cuộn của bảng và từ chức responder
-(void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    [self.view endEditing:YES]; 
} 
  • Bạn luôn có thể thêm một UITapGestureRecognizer vào bảng/xem và từ chức trả lời từ t ở đây

Cá nhân tôi thường làm điều đó khi cuộn bảng, vì tôi không thích một lần chạm để loại bỏ bàn phím.

+0

Cảm ơn bạn UITapGestureRecognizer đã làm chính xác những gì tôi cần nó để làm. Tôi đánh giá cao thời gian. Tôi chắc chắn rằng các cuộn hoạt động là tốt, tôi chỉ cần vòi nước trong trường hợp này nhưng sẽ giữ cho cuộn trong kho của tôi cho sau này. – Rob

3
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
    UITapGestureRecognizer *doubleTap = 
      [[UITapGestureRecognizer alloc] 
      initWithTarget:self 
      action:@selector(tapDetected:)]; 
      doubleTap.numberOfTapsRequired = 1; 
      [self.tableView addGestureRecognizer:doubleTap]; 
      [doubleTap release]; 

    } 

- (IBAction)tapDetected:(UIGestureRecognizer *)sender 
{ 
    CGPoint p = [sender locationInView:self.tableView]; 

    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:p]; 

    if(indexPath == nil) 
    { 
    NSLog(@"empty"); 
    } 
    else 
    { 
    [textField resignFirstResponder]; 
    } 
} 

Tôi nghĩ rằng nó sẽ giúp ... thử nó ..

+1

Tôi đã kết thúc bằng cách sử dụng cuộn vì khi tôi đặt một tapgesture trên tableview nó gây ra các tế bào không còn đọc vòi và do đó các tế bào sẽ không gửi các tế bào vì cử chỉ tap đã ăn lên sự kiện này. Cảm ơn bạn mặc dù và tôi có thể sẽ cần mã này trong tình huống khác xuống đường. – Rob

0
@property (weak, nonatomic) UITextField *activeTextField; // keeps track of whose keyboard is being displayed. 

- (void)textFieldDidBeginEditing:(UITextField *)textField { 
    self.activeTextField = textField; 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    // if (indexPath equal to something then) 
    [self.activeTextField resignFirstResponder]; 
} 
3

Thêm một recognizer tap cử chỉ là một giải pháp thú vị, nhưng có một sự thay thế và bạn không cần phải mã hóa bất cứ điều gì!

Bạn có thể đặt trong Trình tạo giao diện thuộc tính bàn phímDismissMode thành "Loại bỏ khi kéo" cho chế độ xem bảng của bạn. Đó là thuộc tính được kế thừa từ UIScrollView và bất cứ khi nào bạn cuộn chế độ xem bảng, bàn phím sẽ bị loại bỏ.

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