2012-04-04 12 views
5

संभव डुप्लिकेट:
How can I detect if an external keyboard is present on an iPad?मुझे कैसे पता चलेगा कि हार्डवेयर कीबोर्ड है या नहीं?

एक उपयोगकर्ता संपादन अपने iPhone अनुप्रयोग के UI में किसी पाठ फ़ील्ड शुरू होता है, मैं संबंधित की एक सूची के लिए पाठ फ़ील्ड और कीबोर्ड के बीच की जगह का उपयोग करना चाहते विकल्प।

आईओएस से नियमित (ऑन-स्क्रीन) कीबोर्ड का उपयोग करने के लिए, कुछ convenient notifications सुनने के लिए कुछ हैं, जो मुझे यह तय करने में मदद करते हैं कि मैंने सूची के लिए कितनी जगह छोड़ी है।

हालांकि जब आप हार्डवेयर कीबोर्ड को संलग्न करते हैं (या उपयोग को अनुकरण करते हैं), तो इन अधिसूचनाओं को और पोस्ट नहीं किया जाता है। बहुत अप्रत्याशित नहीं है, लेकिन यह मुझे एक चुनौती के साथ छोड़ देता है। यदि उपयोगकर्ता हार्डवेयर कीबोर्ड का उपयोग करता है, तो मेरे पास सूची के लिए और स्थान है।

लेकिन मैं कैसे निर्धारित कर सकते हैं उपयोगकर्ता एक हार्डवेयर कुंजीपटल है या नहीं, वहाँ को सुनने के लिए कोई ट्रिगर अधिसूचना या प्रतिनिधि विधि है अगर है कि क्या? या वहाँ है?

यह भी माना जाना चाहिए कि उपयोगकर्ता पहले कीबोर्ड कीबोर्ड के साथ ऐप का उपयोग कर सकता है और फिर उसके हार्डवेयर कीबोर्ड को संलग्न कर सकता है और ऐप के साथ काम करना जारी रख सकता है। उस बिंदु पर, सॉफ्टवेयर कीबोर्ड छुपाएगा, लेकिन उपयोगकर्ता अभी भी टेक्स्टफील्ड को संपादित कर रहा है।

मैं इस सवाल के लिए एक वर्ष शिकार मिला, लेकिन यह अनुत्तरित है:

उत्तर

3

इनपुट गौण विचारों स्क्रीन के नीचे दिखाई जाती हैं वहाँ अगर एक हार्डवेयर संलग्न कुंजीपटल (अन्यथा वे ऑन-स्क्रीन कीबोर्ड के शीर्ष से जुड़े हुए हैं)।

आकार CGRectZero के खाली UIView पर अपने इनपुट दृश्य का एक्सेसरी दृश्य सेट करें। आप दोनों मामलों के लिए शो/छुपा अधिसूचनाएं प्राप्त करेंगे, और metrics in the notification's userinfo dictionary से उपलब्ध स्क्रीन आकार निर्धारित करने में सक्षम होंगे।

UIView *inputAccessoryView = [[[UIView alloc] initWithFrame:CGRectZero] autorelease]; 
inputAccessoryView.autoresizingMask = UIViewAutoresizingFlexibleWidth; 
textView.inputAccessoryView = inputAccessoryView; 

… 

- (void)keyboardWillShow:(NSNotification*)aNotification { 
    NSLog(@"%@", [aNotification userInfo]); 
} 

लॉग इन मेट्रिक्स - फ्रेम ध्यान दें में UIKeyboardFrameEndUserInfoKey बंद स्क्रीन

// (NSDictionary *) { 
//  UIKeyboardAnimationCurveUserInfoKey = 0; 
//  UIKeyboardAnimationDurationUserInfoKey = "0.25"; 
//  UIKeyboardBoundsUserInfoKey = "NSRect: {{0, 0}, {768, 264}}"; 
//  UIKeyboardCenterBeginUserInfoKey = "NSPoint: {384, 891}"; 
//  UIKeyboardCenterEndUserInfoKey = "NSPoint: {384, 1155}"; 
//  UIKeyboardFrameBeginUserInfoKey = "NSRect: {{0, 758}, {768, 264}}"; 
//  UIKeyboardFrameChangedByUserInteraction = 0; 
//  UIKeyboardFrameEndUserInfoKey = "NSRect: {{0, 1022}, {768, 264}}"; 
// } 

अद्यतन है - बहुत संबंधित सवाल में user721239's answer के समान है।

+0

अच्छा हैक, वास्तव में अन्य प्रश्नों की एक डुप्ली है, लेकिन यह मेरी खोजों में दिखाई नहीं दे रहा था। धन्यवाद! – epologee