2011-05-04 11 views
7

मैंने आईओएस एप्लिकेशन में एक कस्टम कीबोर्ड दृश्य लागू किया है। मेरे पास कई यूआईटीएक्स्टफिल्ड्स हैं जो इस कीबोर्ड का उपयोग करते हैं। इनमें से कुछ UITextFields में प्रतिनिधि हैं जो shouldChangeCharactersInRange ओवरराइड करते हैं। हालांकि यदि मेरा कीबोर्ड केवल टेक्स्ट फ़ील्ड में टेक्स्ट मान सेट करता है, तो चाहिएChangeCharactersInRange संदेश नहीं भेजा जाता है। मुझे लगता है कि मुझे वास्तव में SendKey की तरह कुछ करना है और UITextField को कुंजी कोड भेजना है।आईओएस: UITextField को कुंजी कैसे भेजें?

कोई सुझाव?

उत्तर

-1

ऐसा लगता है कि कुंजीपटल केवल मूल्य निर्धारित करने के बजाय, यूआईटीएक्स्टफिल्ड में कनवेंज कैरैक्टर्स इनरेंज संदेश भेजने के लिए ज़िम्मेदार है। अपने कीबोर्ड range और string के मूल्यों की गणना है, और कहते हैं:

if ([[theTextField delegate] textField:theTextField shouldChangeCharactersInRange:range replacementString:string]) 
    theTextField.text = [theTextField.text stringByReplacingCharactersInRange:range withString:string]; 
+0

ऐसा प्रतीत नहीं होता कि मुझे सीमा मिल सकती है। मैं नहीं देखता कि कर्सर की स्थिति कैसे प्राप्त करें, या चयनित वर्णों की श्रेणी, यदि कोई हो। – Darrell

+0

इस क्षेत्र में टेक्स्ट की पूरी श्रृंखला का उपयोग करने का प्रयास करें, निम्नानुसार: 'एनएसआरेंज रेंज = एनएसएमकेरेंज (0, theTextField.text.length);' – BHSPitMonkey

+0

यह एक ही कुंजी के दौरान पूरे पाठ को बदलने के लिए एक अजीब काम की तरह लगता है दबाया जाता है, लेकिन यह काम कर सकता है। अब मेरी समस्या यह है कि मुझे नहीं पता कि कर्सर की स्थिति चरित्र को सम्मिलित करने के लिए कहां है। अगर मैं कर्सर की स्थिति जानता था, तो मैं सही सीमा भी भेज सकता था। – Darrell

5

As I note in my answer here, UITextFieldUITextInput प्रोटोकॉल के अनुरूप है।

[textField replaceRange:textField.selectedTextRange withText:text]; 
रुचि का

:: तो आप अपने तरीकों फोन "", ज़ाहिर है, एक बैकस्पेस प्रदर्शन करेंगे और " " एक अंतरिक्ष करेंगे।

इसे shouldChangeCharactersInRange विधि स्वचालित रूप से कॉल करना चाहिए। यदि नहीं, तो आपको खुद ऐसा करना होगा।

यदि आप आईओएस पर एक कस्टम कीबोर्ड बनाने जा रहे हैं तो आपको निश्चित रूप से ऐसा करने की ज़रूरत है।

+1

मैं एक कस्टम UIUutton दबाकर, UITextField से एकल वर्णों को हटाने का एक तरीका ढूंढ रहा था, भले ही कर्सर टेक्स्ट फ़ील्ड के अंत में * नहीं * हो। यह जवाब सिर्फ यही है ("रुचि के ..." भाग के लिए kudos), लाखों (+1) धन्यवाद! – pille

+1

'[टेक्स्टफिल्ड प्रतिस्थापन श्रेणी: textField.selectedTextRange withText: text]' 'ChangeChharactersInRange' को कॉल नहीं करना चाहिए। – memmons