कई दिलचस्प जवाब। मैं उस समाधान में विभिन्न दृष्टिकोणों को संकलित करना चाहता हूं जो मैंने सोचा था कि एक यूआईटेबल व्यू परिदृश्य (यह वह है जिसे मैं आमतौर पर उपयोग करता हूं) को फिट करता हूं: हम जो आमतौर पर चाहते हैं वह मूल रूप से कीबोर्ड को दो परिदृश्यों पर छिपाना है: पाठ यूआई तत्वों के बाहर टैप करने पर, या 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];
}
यह विधि UITableView व्यू पदानुक्रम के भीतर किसी भी टेक्स्टफीड UI को सब-यूआई से इस्तीफा देती है, इसलिए यह स्वतंत्र रूप से हर एक तत्व को इस्तीफा देने की तुलना में अधिक व्यावहारिक है।
इसके बाद, हम एक बाहरी टैप इशारे के माध्यम से खारिज करने का ख्याल रखते हैं:
- (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 पर सेट करना है। GureureRecognizer को UITableView के सामान्य आंतरिक कामकाज (उदाहरण के लिए, सेल चयन में हस्तक्षेप नहीं करने) से ओवरराइड करने से रोकना है।
अंत में, यूआईटेबल व्यू को ऊपर / नीचे स्क्रॉल करने पर कीबोर्ड को छिपाने के लिए, हमें UIScrollViewDelegate प्रोटोकॉल स्क्रॉल व्यूविलबिनग्रैगिंग: विधि: के रूप में लागू करना चाहिए।
.h फ़ाइल
@interface MyViewController : UIViewController <UIScrollViewDelegate>
.m फ़ाइल
#pragma mark - UIScrollViewDelegate
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
[self hideKeyboard];
}
मुझे उम्मीद है यह मदद करेगा! =)