2012-05-25 11 views
12

हम Phonegap उपयोग कर रहे हैं हमारे मोबाइल एप्लिकेशन विकसित करने के लिए से काली पट्टी को हटाने, और हम अगले/पिछला/कीबोर्ड से बार काला किया दूर करने के लिए यहां से कोड उधार:Phonegap: पूरी तरह से iPhone कुंजीपटल

https://stackoverflow.com/a/9276023/35364

यह कोड क्या करता है यह एक UIView ऑब्जेक्ट के रूप में ब्लैक बार पाता है, और उस पर 'removeFromSuperview' कॉल करता है।

हम आईओएस एसडीके/एपीआई से परिचित नहीं हैं। इसलिए जब हम कोड देख सकते हैं और यह कर सकते हैं कि यह क्या कर रहा है, तो हम यह नहीं बता सकते कि यह ठीक से कर रहा है या इसे कैसे सुधारें।

विशिष्ट समस्या हम में चल रहा है:

हम संदेश लिखने के लिए एक पाठ क्षेत्र है, और हम मैन्युअल रूप से इस क्षेत्र की स्थिति निर्धारण को नियंत्रित कर रहे हैं देशी एसएमएस के समान वास्तव में कीबोर्ड के ऊपर हो सकता है, एप्लिकेशन। दूसरे शब्दों में, हम इसे डाल रहे हैं जहां ब्लैक बार होना चाहिए था।

जब हम संदेश फ़ील्ड में फ़ोकस/टाइप करते हैं, तो सिस्टम दृश्य को धक्का देता है। ऐसा लगता है कि यह सुनिश्चित करने के लिए एक तंत्र है कि पाठ फ़ील्ड अदृश्य नहीं है जब उपयोगकर्ता इसमें टाइप करता है।

यह तब भी हो रहा है जब टेक्स्ट फ़ील्ड दिखाई दे रहा है।

मैंने देखा कि ब्लैक बार सामान्य रूप से इनपुट क्षेत्र डालने से (जैसा कि इसके पीछे विरोध करना है), दृश्य स्क्रॉल नहीं करता है।

तो ऐसा लगता है कि सिस्टम किसी भी तरह से सोचता है कि ब्लैक बार अभी भी वहां है!

(दो बार जांचने के लिए: जब काला बार हटाया नहीं जाता है, और हम टेक्स्ट फ़ील्ड को इसके ऊपर रखते हैं, तो हम इसमें फोकस कर सकते हैं और टाइप कर सकते हैं, और दृश्य स्क्रॉल नहीं होगा)।

तो सवाल यह है:

क्यों "प्रणाली" सामग्री को एक पाठ-क्षेत्र है कि जगह सही है, जहां काला बार माना जाता है "के पीछे" संपादित करते समय धक्का करता है? क्या ऐसा इसलिए है क्योंकि ब्लैक बार अभी तक पूरी तरह से हटा नहीं गया है? क्या हमें ब्लैक बार को "पूरी तरह से" हटाने के लिए कुछ करने की ज़रूरत है? क्या हमें कीबोर्ड के आकार को फिर से समझने के लिए आईओएस को मजबूर करने की आवश्यकता है? या वास्तव में क्या?

क्या यह तंत्र आईओएस के UIWebView, या फोनगैप द्वारा कार्यान्वित किया गया यह तंत्र (दृश्य को धक्का दे रहा है) है?

क्या कोई फोनगैप ऐप है जिसने इस समस्या को हल किया है?

उत्तर

9

UIScrollView *webScroll = [webView.subviews lastObject]; 
CGRect newFrame = webScroll.frame; 

float accesssoryHeight = subviewWhichIsPossibleFormView.frame.size.height; 
newFrame.size.height += accesssoryHeight; 

[subviewWhichIsPossibleFormView removeFromSuperview]; 
[webScroll setFrame:newFrame]; 

के साथ बदलें

[subviewWhichIsPossibleFormView removeFromSuperview]; 

यह लापता गौण स्थान की मात्रा के लिए सामग्री स्क्रॉल दृश्य का आकार बदलें। यह अब तक "निजी एपीआई" का उपयोग दूसरे कोड के रूप में कर रहा है। विस्तार से यह सीधे निजी एपीआई का उपयोग नहीं कर रहा है, लेकिन अगर ऐप्पल यह बदलने का फैसला करता है कि दृश्य कैसे दिखाई देता है (इस मामले में कीबोर्ड और वेब व्यू) तो यह क्रैश हो जाएगा।
उदाहरण के लिए यदि वे UIWebFormAccessory का नाम बदलते हैं, तो आपका कोड अब और काम नहीं करेगा।

संपादित करें:
आईओएस 5 पर।0+ आप सीधे webView.scrollView पर कॉल कर सकते हैं। तो अगर आप एक पूर्व iOS 5 वापस आने के लिए कोड को विभाजित कर सकते हैं:

UIScrollView *webScroll; 
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 5.0) { 
    webScroll = webView.scrollView; 
} else { 
    webScroll = [webView.subviews lastObject]; // iOS 2.x (?) - 4.x 
    // make sure this code runs appropriate on older SDKs 
} 
+0

धन्यवाद इस लगता है जैसे कि यह काम हो सकता है

<plugin name="KeyboardToolbarRemover" value="KeyboardToolbarRemover" /> 

,: - 0 बजाय अपने config XML फ़ाइल से निम्नलिखित के साथ संपादित करें। एक बात हालांकि मुझे यकीन नहीं है कि 'वेबब' क्या होना चाहिए। मैंने 'UIScrollView * webScroll = [self.webView.subviews lastObject] की कोशिश की; 'लेकिन ऐसा लगता है कि यह काम नहीं कर रहा था। – hasen

+0

अप हाँ यह मेरा अस्थायी वेब व्यू था, एक 'आईबीओलेट'। लेकिन यह आपके काम की तरह काम करना चाहिए। कृपया 'एनएसएलओजी (% @, self.webView.subviews) '। हो सकता है कि आपके पास अधिक सबव्यूज़ हों, मेरे पास केवल एक (स्क्रॉल व्यू) –

+0

मुझे लगता है कि 'self.webView.scrollView' भी काम करना चाहिए। – hasen

0

यह मेरे लिए काम किया: https://github.com/don/KeyboardToolbarRemover

आप हालांकि पता करना होगा, वहाँ Phonegap 2.3 के रूप में कोई Cordova.plist फ़ाइल है। शाखा में