คำตอบที่น่าสนใจมากมาย ฉันต้องการรวบรวมแนวทางต่างๆในโซลูชันที่ฉันคิดว่าเหมาะสมกับสถานการณ์ UITableView มากที่สุด (เป็นวิธีที่ฉันมักจะใช้): สิ่งที่เราต้องการโดยทั่วไปคือการซ่อนแป้นพิมพ์ในสองสถานการณ์: เมื่อแตะด้านนอกองค์ประกอบ UI ของข้อความ หรือในการเลื่อนลง / ขึ้น UITableView สถานการณ์แรกที่เราสามารถเพิ่มได้อย่างง่ายดายผ่าน TapGestureRecognizer และครั้งที่สองผ่านวิธี UIScrollViewDelegate scrollViewWillBeginDragging: ลำดับแรกของธุรกิจวิธีซ่อนแป้นพิมพ์:
/**
* Shortcut for resigning all responders and pull-back the keyboard
*/
-(void)hideKeyboard
{
//this convenience method on UITableView sends a nested message to all subviews, and they resign responders if they have hold of the keyboard
[self.tableView endEditing:YES];
}
วิธีนี้จะลาออกจาก UI ของ textField ของมุมมองย่อยภายในลำดับชั้นมุมมอง UITableView ดังนั้นจึงเป็นประโยชน์มากกว่าการลาออกทุกองค์ประกอบอย่างเป็นอิสระ
ต่อไปเราจะดูแลการปิดโดยใช้ท่าทางสัมผัสภายนอกโดย:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
[self setupKeyboardDismissGestures];
}
- (void)setupKeyboardDismissGestures
{
// Example for a swipe gesture recognizer. it was not set-up since we use scrollViewDelegate for dissmin-on-swiping, but it could be useful to keep in mind for views that do not inherit from UIScrollView
// UISwipeGestureRecognizer *swipeUpGestureRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(hideKeyboard)];
// swipeUpGestureRecognizer.cancelsTouchesInView = NO;
// swipeUpGestureRecognizer.direction = UISwipeGestureRecognizerDirectionUp;
// [self.tableView addGestureRecognizer:swipeUpGestureRecognizer];
UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideKeyboard)];
//this prevents the gestureRecognizer to override other Taps, such as Cell Selection
tapGestureRecognizer.cancelsTouchesInView = NO;
[self.tableView addGestureRecognizer:tapGestureRecognizer];
}
การตั้งค่า tapGestureRecognizer.cancelsTouchesInView เป็น NO คือการหลีกเลี่ยงไม่ให้ท่าทาง
ในที่สุดเพื่อจัดการกับการซ่อนแป้นพิมพ์ในการเลื่อนขึ้น / ลง UITableView เราต้องใช้โปรโตคอล UIScrollViewDelegate scrollViewWillBeginDragging: method เป็น:
.h ไฟล์
@interface MyViewController : UIViewController <UIScrollViewDelegate>
.m ไฟล์
#pragma mark - UIScrollViewDelegate
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
[self hideKeyboard];
}
ฉันหวังว่ามันจะช่วยได้! =)