IOS में कस्टम कीबोर्ड की शुरुआत के साथ, यह समस्या एक अधिक जटिल हो जाती है।
संक्षेप में, कस्टम कीबोर्ड कार्यान्वयन द्वारा UIKeyboardWillShowNotification को कई बार कॉल किया जा सकता है:
- जब Apple सिस्टम कीबोर्ड खोला जाता है (पोर्ट्रेट में)
- UIKeyboardWillShowNotification 224 की कीबोर्ड ऊंचाई के साथ भेजा गया है
- जब स्वेप कीबोर्ड खोला जाता है (पोर्ट्रेट में):
- UIKeyboardWillShowNotification 0 की कीबोर्ड ऊंचाई के साथ भेजा गया है
- UIKeyboardWillShowNotification 216 की कीबोर्ड ऊंचाई के साथ भेजा गया है
- UIKeyboardWillShowNotification 256 की कीबोर्ड ऊंचाई के साथ भेजा गया है
- जब SwiftKey कीबोर्ड खोला जाता है (पोर्ट्रेट में):
- UIKeyboardWillShowNotification 0 की कीबोर्ड ऊंचाई के साथ भेजा गया है
- UIKeyboardWillShowNotification 216 की कीबोर्ड ऊंचाई के साथ भेजा गया है
- UIKeyboardWillShowNotification 259 की कीबोर्ड ऊंचाई के साथ भेजा गया है
इन परिदृश्यों को एक कोड-लाइन में ठीक से संभालने के लिए, आपको निम्न करने की आवश्यकता है:
UIKeyboardWillShowNotification और UIKeyboardWillHideNotification नोटिफिकेशन के खिलाफ पर्यवेक्षकों को पंजीकृत करें :
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillHide:)
name:UIKeyboardWillHideNotification
object:nil];
वर्तमान कीबोर्ड ऊंचाई को ट्रैक करने के लिए एक वैश्विक चर बनाएँ:
CGFloat _currentKeyboardHeight = 0.0f;
कीबोर्ड ऊंचाई में वर्तमान परिवर्तन पर प्रतिक्रिया करने के लिए keyboardWillShow को लागू करें :
- (void)keyboardWillShow:(NSNotification*)notification {
NSDictionary *info = [notification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;
CGFloat deltaHeight = kbSize.height - _currentKeyboardHeight;
_currentKeyboardHeight = kbSize.height;
}
नोट: आप विचारों की ऑफसेटिंग को चेतन करना चाह सकते हैं। जानकारी शब्दकोश से keyed कोई मान UIKeyboardAnimationDurationUserInfoKey । यह मान उसी गति से आपके परिवर्तनों को प्रदर्शित करने के लिए उपयोग किया जा सकता है जब कीबोर्ड प्रदर्शित किया जा रहा है।
लागू keyboardWillHide रीसेट _currentKeyboardHeight करने और कीबोर्ड खारिज कर दिए जाने पर प्रतिक्रिया:
- (void)keyboardWillHide:(NSNotification*)notification {
NSDictionary *info = [notification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;
_currentKeyboardHeight = 0.0f;
}
keyboardFrameBeginRect
स्थानीय निर्देशांक में परिवर्तित करते हैं तो यह मदद कर सकता है ।