2012-09-24 20 views
10

को खारिज किए बिना inputAccessoryView को छिपाने के लिए कैसे मैं textView की inputAccessoryView प्रॉपर्टी में टूलबार का उपयोग कर रहा हूं। जब कीबोर्ड दिखाता है, तो यह अपेक्षित के रूप में टूलबार प्रदर्शित करता है। जब डिवाइस घुमाया जाता है तो मैं टूलबार को हटाना चाहता हूं। मैंने कोशिश की:कुंजीपटल

myTextView.inputAccessoryView.hidden = !layoutIsPortrait; 

यह टूलबार को छुपाता है, लेकिन पीछे लम्बे कीबोर्ड की रूपरेखा छोड़ देता है। टूलबार फिट करने के लिए कीबोर्ड अभी भी आकार में है। यह खराब दिखता है और अंतर्निहित उत्तरदाताओं की स्पर्श घटनाओं में हस्तक्षेप करता है।

myTextView.inputAccessoryView = nil; 

केवल तभी काम करता है जब मैं इस्तीफा देता हूं फर्स्ट रेस्पॉन्डर, फिर फर्स्ट रेस्पॉन्डर बनें। यह स्वीकार्य नहीं है। मैं कर्सर प्लेसमेंट और टेक्स्ट व्यू की सामग्री खो देता हूं, कीबोर्ड चमकता है और पीछे आता है।

[myTextView.inputAccessoryView removefromSuperview]; 

कुछ भी नहीं करता है। मैं एक इवर में उपकरण पट्टी के लिए एक संदर्भ को बचाया और संबोधित है कि इसके बजाय,

[myIvarReference removeFromSuperview]; 

काम करता है यही कारण है, लेकिन फिर कीबोर्ड के लम्बे रूपरेखा धुँधली-सी दिखाई है। इस बार यह अन्य विचारों के स्पर्श में हस्तक्षेप नहीं करता है। तो अब यह एक कामकाजी समाधान है लेकिन दृष्टिहीन अस्वीकार्य है। इच्छा पर inputAccessoryView को दिखाने और छिपाने का मैं और क्या प्रयास कर सकता हूं?

स्क्रीनशॉट कीबोर्ड के ऊपर अस्पष्ट रेखा हटा उपकरण पट्टी

Rotated keyboard with toolbar removed

+0

क्या आप "लम्बे कीबोर्ड की रूपरेखा" के आधार पर स्क्रीन शॉट पोस्ट करना चाहते हैं? मुझे लगता है कि आपने जिन समाधानों का उल्लेख किया है, उन्हें काम करना चाहिए (कम से कम उनमें से एक), लेकिन मुझे यकीन नहीं है कि आपके लिए कृत्रिम रूप से स्वीकार्य क्या है ... – geraldWilliam

+0

मैंने स्क्रीनशॉट का एक करीबी जोड़ा –

+0

मैं इसका परीक्षण नहीं कर सकता अभी अभी है, लेकिन myTextView.inputAccessoryView.frame = CGRectZero जो आप खोज रहे हैं वह करता है? – geraldWilliam

उत्तर

2

कीबोर्ड के फ्रेम को बदलने के लिए एक तरह से कभी नहीं मिला का अवशेष है। आखिरकार inputAccessoryView से पूर्ववत करने का निर्णय लिया, मेरे टूलबार को सीधे सबव्यूव के रूप में दृश्य में जोड़ें और इसे सीधे कीबोर्ड के साथ एनिमेट करें। यह दो स्वतंत्र और इसलिए, कोई और लाइन रखता है।

23
myTextView.inputAccessoryView = nil; 
[myTextView reloadInputViews]; 

यह टूलबार को दृश्य से हटा देता है और दृश्य को फिर से लोड करता है। इस तरह आपको इस्तीफा देने की आवश्यकता नहीं है फर्स्ट रेस्पॉन्डर और फर्स्ट रेस्पॉन्डर बनें। इसके अतिरिक्त, यह अभी भी आपके कर्सर प्लेसमेंट और सामग्री को रखेगा।

+1

धन्यवाद। मुझे इसकी तलाश थी। यह एक स्वीकृत उत्तर होना चाहिए। एक ऊपर! – karim

4

मेरे लिए एरिक का समाधान वास्तव में फ्रेम या स्पर्श क्षेत्रों को रीसेट नहीं करता है। संभवतः यह एक बग है कि ऐप्पल चीजों को कैसे संभालता है। हालांकि, मुझे एक कामकाज मिला जिसने मेरे लिए समस्या हल की। जब मैं एक फ्रेम के बिना एक नया inputAccessoryView निर्धारित करते हैं, reloadInputViews ठीक काम किया:

myTextView.inputAccessoryView = [[UIView alloc] initWithFrame: CGRectZero]; 
[myTextView reloadInputViews]; 
2

जवाब में से कोई भी ऊपर के लिए मुझे और reloadInputViews अजीब मुद्दों पैदा कर रहा था काम कर रहे थे।आखिरकार मैं दिखाने के लिए और छिपाने के लिए और ऐसा करने से छूता है पासथ्रू के लिए यह मिल गया:

छिपाएं यह:

[textview.inputAccessoryView setHidden:YES]; 
[textview.inputAccessoryView setUserInteractionEnabled:NO]; 

यह दिखाएं:

[textview.inputAccessoryView setHidden:NO]; 
[textview.inputAccessoryView setUserInteractionEnabled:YES]; 
0

Xamarin कोड

Control.InputAccessoryView = new UIView(CGRect.Empty); 
Control.ReloadInputViews(); 
+0

आम तौर पर, एक उत्तर में केवल एक कोड स्निपेट से अधिक होना चाहिए, जैसे कि यह क्यों काम करता है इसके कुछ स्पष्टीकरण। –

+0

यह सिर्फ jungziege का जवाब xamarin के लिए पुनः लिखा गया ................................. – shane

+0

फिर अपना उत्तर दें इस तरह, कुछ "जंगलजीज के जवाब को सी # और ज़मरिन उपज में परिवर्तित करने जैसा कुछ ..." विशेष रूप से उस मामले में जहां आपका उत्तर किसी और पर बनाता है, इसका उत्तर मूल जवाब के संदर्भ में उपयोगी और विनम्र भी है। –

0

आधारित है एरिक एपेल के उत्तर पर:

myTextView.inputAccessoryView = nil; 
[myTextView reloadInputViews]; 
hideInputAccessoryView = YES; 

इसके अलावा संशोधित:

- (BOOL)canBecomeFirstResponder 
{ 
    BOOL showInputAccessoryView = YES; 

    if (hideInputAccessoryView) 
     showInputAccessoryView = NO; 

    return showInputAccessoryView; 
} 

यह InputAccessoryView छुपाना चाहिए, तब भी जब कीबोर्ड से इस्तीफा दे दिया है।

0

विचित्र रूप से पर्याप्त, मेरे मामले में इनमें से कोई भी दृष्टिकोण काम नहीं करता है।

मैं एक searchcontroller यदि किसी विशेष खोज के दायरे चयन किया जाता है जो एक मानक एप्पल आईओएस कीबोर्ड पॉप अप, और अन्य कार्यक्षेत्रों के मामलों में इनपुट क्षेत्र के रूप में एक संग्रह दृश्य चुना जा रहा है के साथ एक कस्टम कुंजीपटल दृष्टिकोण है। दोनों मामलों में, इनपुट दृश्य प्रदर्शित होने पर स्क्रीन पर एक अवांछित सहायक दृश्य खींचा गया था।

तो,

self.mySearch.searchbar.inputAccessoryView = nil // did not work 

[self.mySearch.searhbar.inputAccessoryView setHidden:YES] // did not work 

self.mySearch.inputAccessoryView = nil // did not work 

self.mySearch.searchbar.inputAccessoryView.frame = CGRectZero //did not work 

[self.mySearch reloadInputViews] 

और विभिन्न संयोजनों उसके आदि, आदि

क्या काम किया है गौण देखने से व्यक्ति गौण आइटम के लिए नष्ट करने के लिए किया गया था:

// insert after assignments of mySearch delegates 
UITextInputAssistantItem *junk = [self.mySearch inputAssistantItem]; 
junk.leadingBarButtonGroups = @[]; 
junk.trailingBarButtonGroups = @[]; 
0
mTextView.inputAccessoryView = [[UIView alloc] initWithFrame:CGRectZero]; 
[mTextView reloadInputViews]; 

मेरे लिए काम करता है, inputAccessoryView से nil पर काम नहीं करेगा, मैं बस नहीं करता ओउ क्यों

संबंधित मुद्दे