2009-11-19 14 views
9

जब कुंजीपटल दिखाई देता है, मैंiPhone UISearchBar और keyboardAppearance

keyboardAppearance = UIKeyboardAppearanceAlert 

मैं प्रलेखन देख लिया है स्थापित करना चाहते हैं और इस तरह आप केवल keyboardType बदल सकते हैं यह लग रहा है।

क्या यह ऐप्पल के किसी भी निजी एपीआई का उल्लंघन किए बिना किया जा सकता है?

उत्तर

-2

कीबोर्डएपियरेंस UITextInputTraitsProtocol की एक संपत्ति है, जिसका अर्थ है कि संपत्ति TextField ऑब्जेक्ट के माध्यम से सेट की गई है। मुझे पता नहीं है कि एसडीके से अलर्ट कीबोर्ड क्या है, यह एक चेतावनी के लिए उपयुक्त कीबोर्ड है।

UITextField *myTextField = [[UITextField alloc] init]; 
myTextField.keyboardAppearance = UIKeyboardAppearanceAlert; 

अब उपयोगकर्ता पाठ क्षेत्र टैप करता और कीबोर्ड दिखाता है जब, यह तुम क्या चाहते हो जाना चाहिए:

यहाँ

कैसे आप संपत्ति का उपयोग है।

+1

आप इस तथ्य को याद करते हैं कि यह यूआईएसएक्सबार से आ रहा है, न कि यूआईटीएक्स्टफाल्ड। UIKeyboardAppearanceAlert की एक पारदर्शी पृष्ठभूमि है, जिसे मैं अपने सभी ऐप में रखना चाहता हूं। यह हासिल किया जा सकता है जैसा आपने यूआईटीएक्स्टफिल्ड्स पर प्रदर्शित किया है, हालांकि यूआईएसearchBar में इसके अंदर एक टेक्स्ट फ़ील्ड भी है। मैं जानना चाहता था कि इस पाठ फ़ील्ड के लिए कीबोर्ड उपस्थिति सेट करना संभव है या नहीं। –

+0

मेरा बुरा। दस्तावेज़ों में, ऐसा लगता है कि UISearchBar क्लास पर कीबोर्ड पारदर्शिता सेट करने के लिए कोई संपत्ति या विधि नहीं है। आप केवल कीबोर्ड प्रकार सेट कर सकते हैं। – Justin

27

यह करना चाहिए:

for(UIView *subView in searchBar.subviews) 
    if([subView isKindOfClass: [UITextField class]]) 
     [(UITextField *)subView setKeyboardAppearance: UIKeyboardAppearanceAlert]; 

करने का किसी अन्य तरीके से नहीं मिला ...

+0

मैं पुष्टि करता हूं: यह काम करता है: ओ) मुझे इसे पाने का कोई और तरीका नहीं मिला। यह जवाब स्वीकार किया जाना चाहिए। – CedX

+0

मुझे लगता है कि यह काम करता है, लेकिन मुझे यहां एक अलग, सरल समाधान मिला: http://stackoverflow.com/questions/1594346/dynamically-changing-keyboard-type-for-a-uisearchbar – ecotax

+0

@ecotax: आप लिंक कर रहे हैं कीबोर्ड टाइप (डिफ़ॉल्ट, ASCII, संख्या ...) के बारे में एक समाधान के लिए, लेकिन यह कीबोर्ड के बारे में है (प्रकाश, अंधेरा) – auco

9

यह नहीं रह गया है, iOS 7 पर काम करता है क्योंकि UISearchBar दृश्य पदानुक्रम बदल गया है। UITextView अब पहले सबव्यूव का एक सबव्यूव है (उदाहरण के लिए searchBar.subviews[0].subviews सरणी में)।

ऐसा करने का एक और भविष्य का सबूत तरीका पूरे दृश्य पदानुक्रम को दोबारा जांचना होगा, और UITextField के बजाय UITextInputTraits प्रोटोकॉल की जांच करना होगा, क्योंकि वास्तव में यह विधि घोषित करता है। ऐसा करने का एक साफ तरीका श्रेणियों का उपयोग करना है।

- (void) setKeyboardAppearence: (UIKeyboardAppearance) appearence { 
    [(id<UITextInputTraits>) [self firstSubviewConformingToProtocol: @protocol(UITextInputTraits)] setKeyboardAppearance: appearence]; 
} 

फिर UIView पर एक वर्ग को जोड़ने है कि इस विधि कहते हैं:

- (UIView *) firstSubviewConformingToProtocol: (Protocol *) pro { 
    for (UIView *sub in self.subviews) 
     if ([sub conformsToProtocol: pro]) 
      return sub; 

    for (UIView *sub in self.subviews) { 
     UIView *ret = [sub firstSubviewConformingToProtocol: pro]; 
     if (ret) 
      return ret; 
    } 

    return nil; 
} 

अब आप उसी में खोज पट्टी पर कुंजीपटल उपस्थिति निर्धारित कर सकते हैं सबसे पहले UISearchBar पर एक वर्ग है कि इस विधि बढाए जिस तरह से आप किसी पाठ फ़ील्ड होगा:

[searchBar setKeyboardAppearence: UIKeyboardAppearanceDark]; 
+0

धन्यवाद, बहुत उपयोगी! मुझे लगता है कि हालांकि एक छोटा टाइपो है: "[सब सबव्यू कॉन्फॉर्मिंग टूप्रोटोकॉल: प्रो]" होना चाहिए "[सब फर्स्ट सबव्यूव्यू कॉन्फॉर्मिंग टूप्रोटोकॉल: प्रो]" – auco

+0

@auco धन्यवाद, इसे ठीक किया गया! – stonemonk

35

सबसे अच्छा तरीका है कि मैं ऐसा करने के लिए, यदि आप अपने पूरे एप्लिकेशन में करना चाहते हैं पाया, UITextField पर उपस्थिति का प्रयोग है। इसे लॉन्च पर अपने ऐपडिलेगेट में रखें।

[[UITextField appearance] setKeyboardAppearance:UIKeyboardAppearanceDark]; 
+0

मेरे लिए चाल थी, धन्यवाद! – Funkycochise

+0

अब बहुत बेहतर तरीका है! धन्यवाद – iGranDav

+0

Thats भी मेरे लिए यह किया था। आईओएस 7 पर। यद्यपि श्रेणी विचार, नीचे, अच्छा लग रहा है। –