2011-05-11 14 views
9

हम UITextField की इस संपत्ति "भेजें" करने के लिए, "खोज", आदि सेट कर सकते हैं, "गो" .:क्या मैं गतिशील रूप से UITextField की संपत्ति UIReturnKeyType बदल सकता हूं?

@property(nonatomic) UIReturnKeyType returnKeyType 

लेकिन यह स्थापित करने UITextField का उपयोग करते समय बिल्कुल भी नहीं बदलता है।

मुझे यह व्यवहार चाहिए: जब यूआईटीएक्स्टफिल्ड खाली होता है, तो वापस लौटें, "टाइप" हो, अन्यथा वापस लौटें, "टाइप" हो।

उत्तर

17

आम तौर पर returnKeyType और अन्य गुण जब कुंजीपटल प्रदर्शित किया जाता है, लेकिन बाद में अद्यतन के लिए निगरानी नहीं की जाती जाँच कर रहे हैं। returnKeyType को बदलने के बाद टेक्स्ट फ़ील्ड पर reloadInputViews पर कॉल करने का प्रयास करें, इसे कीबोर्ड सेटिंग्स को रीफ्रेश करने के लिए निर्देश देना चाहिए।

+0

ऐसा लगता है। धन्यवाद। – yehnan

+0

आईओएस 9 में काम नहीं करता है - http: // stackoverflow आज़माएं।com/a/1 9405954/1633251 –

7

दुर्भाग्य से, दो-बाइट कीबोर्ड पर -[reloadInputViews] इच्छा गंदगी कीबोर्ड इनपुट।

दो बाइट कीबोर्ड (उदाहरण के लिए कांजी) पाठ क्षेत्र में अस्थायी पात्रों डाल दिया और पुष्टि करने के लिए चरित्र में प्रवेश किया एक माध्यमिक कीस्ट्रोक में प्रवेश हिट करने के लिए उपयोगकर्ता की आवश्यकता है। -[reloadInputViews] कॉलिंग द्वितीयक कीस्ट्रोक स्थिति को छोड़ देता है।

मुझे अभी तक इस परिदृश्य के लिए समाधान नहीं मिला है।

+0

कुंजीपटल रीसेट करता है जब आप टेक्स्टफिल्ल्ड पर reloadInputViews को कॉल करते हैं, जो इसे टेक्स्ट फ़ील्ड के डिफ़ॉल्ट में बदल देता है, उदाहरण के लिए, संख्या प्रविष्टि से ईमेल प्रविष्टि में स्विच करना। आप कम से कम reloadInputViews को कॉल करके कितनी बार ऐसा होता है IF वापसीKeyType परिवर्तन करता है। कोड के लिए नीचे मेरा जवाब देखें। –

+0

कॉलिंग '[टेक्स्टफिल्ड इस्तीफा फर्स्ट रेस्पॉन्डर]; [textView बनें फर्स्ट रेस्पॉन्डर]; ', एक के बाद एक, एनीमेशन के बिना कीबोर्ड रीफ्रेश करेगा। – cnotethegr8

1

रूप Animie ने कहा, सबसे अच्छा तरीका है परिवर्तन के बारे में बताने के लिए कुंजीपटल reloadInputViews है।

आप इस तरह कर सकते हैं:

- (void)textFieldDidBeginEditing:(UITextField *)textField{ 

if(self.myTextField.editing){ 

     self.myTextField.editing.returnKeyType = UIReturnKeyNext;// or UIReturnKeyGo, etc. 

    } 
} 
अपने कोड में

कहीं, viewDidLoad में उदाहरण के लिए, UIKeyboardWillShowNotification के लिए रजिस्टर:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; 

और जब कुंजीपटल दिखाई देता है, तो आप reloadInputViews:

- (void)keyboardWillShow:(NSNotification *)notification{ 
    [self.myTextField reloadInputViews]; 

} 
2

कुछ ने reloadInputViews को कॉल करने का प्रस्ताव दिया है अपडेट करने के लिए कुंजीपटल की वापसी कुंजी को मजबूर करने के लिए टेक्स्ट फ़ील्ड पर। दुर्भाग्य से कीबोर्ड रीसेट करता है जब आप टेक्स्टफिल्ल्ड पर reloadInputViews को कॉल करते हैं, जो इसे वापस टेक्स्ट फ़ील्ड के डिफ़ॉल्ट में बदल देता है, उदाहरण के लिए, संख्या प्रविष्टि से ईमेल प्रविष्टि में स्विच करना। आप कम से कम reloadInputViews को कॉल करके कितनी बार ऐसा होता है IF वापसीKeyType परिवर्तन करता है।

int currentTextFieldReturnKeyType = textField.returnKeyType; 
[textField setReturnKeyType:UIReturnKeyGo]; 
if (currentTextFieldReturnKeyType != textField.returnKeyType) { 
    [textField reloadInputViews]; 
} 

यह समस्या को पूरी तरह से हल नहीं करता है, लेकिन इसे एक कीस्ट्रोक को कम करता है जहां रिटर्न कुंजी बदलती है।

0

आप सभी का कहना है के रूप में, reloadInputViews अपनी प्रारंभिक UIKeyboardType करने के लिए कीबोर्ड रीसेट करता है। ऐप्पल को कीबोर्ड को अपने कीबोर्ड प्रकार के लिए पूछने के लिए एक एपीआई देना चाहिए ताकि इसे इनपुट दृश्यों को पुनः लोड करने से पहले इसे वापस सेट किया जा सके।

नए आईओएस 8 एपीआई के साथ आप अपना खुद का कीबोर्ड UIKeyboardType लौट सकते हैं।

यदि अभी भी आईओएस 7 का उपयोग कर आप एक निश्चित कुंजीपटल बच्चे के दृश्य से पूछ सकते हैं कि यह किस राज्य में है। जब भी आपको आवश्यकता हो, उस मूल्य को रीसेट और रीसेट करें। यहां मेरे स्रोत पर एक नज़र डालें: https://github.com/ustwo/US2KeyboardType

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

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