2011-01-10 23 views
55

मैं एक कस्टम कीबोर्ड/कीपैड बनाने के बारे में कैसे जा सकता हूं जो यूआईटीएक्स्टफिल्ड पर कोई टैप करता है? मैं ए, बी, सी, 1, 2, 3 और एक एंटर बटन के साथ एक कीपैड प्रदर्शित करना चाहता हूं, और कुछ नहीं। कीपैड को मानक कीबोर्ड की तरह काम करना चाहिए और व्यवहार करना चाहिए (व्यवहार में) लेकिन यह निश्चित रूप से अलग दिखाई देगा।कस्टम कीबोर्ड कैसे बनाएं

मुझे कोई उदाहरण नहीं मिला है और मुझे सबसे अच्छा मिला है कि मौजूदा कीबोर्ड वाले अक्षरों को फ़िल्टर करना एक अस्वीकार्य समाधान है।

+0

मैंने एक बहुत ही समान प्रश्न का उत्तर दिया (नीचे दिए गए मेरे उत्तर में लिंक किया गया है: http://stackoverflow.com/a/13351686/937822) जो एक कस्टम कीबोर्ड बनाता है। मैंने इसे ओपन सोर्स बनाया और इसे गिटूब पर इस्तेमाल करने के लिए रखा, और हाल ही में हेक्स कीपैड के साथ एक उदाहरण जोड़ा। यदि आप केवल ए-सी और 1-3 चाहते हैं, तो आपको बस अतिरिक्त बटन हटाने की आवश्यकता होगी! – lnafziger

उत्तर

38

मैं तुम्हें "Text, Web, and Editing Programming Guide for iOS"

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

यदि यह एप्लिकेशन टेक्स्ट संपादन के लिए UITextView और UITextField ऑब्जेक्ट्स का उपयोग कर रहा है, तो यह सुविधा प्राप्त करने के लिए, बस इनपुट व्यू और inputAccessoryView गुणों को कस्टम दृश्य असाइन करें। उन कस्टम दृश्य दिखाए जाते हैं पाठ वस्तु पहले प्रत्युत्तर हो जाता है ...


यह एक अच्छा परिचय के रूप में काम कर सकता है: customizing the iOS keyboard

+1

यह लिंक आधा सहायक है। यह आपको बताता है कि कस्टम कीबोर्ड बनाने के लिए कितना संभव है और कस्टम टेक्स्ट से इनपुट स्वीकार करने के लिए आपकी टेक्स्ट-स्वीकृति क्लास को कौन सी श्रेणियां अनुरूप माननी चाहिए ... लेकिन आपको कस्टम बनाने के बारे में कुछ भी नहीं बताता है कीबोर्ड स्वयं कुछ उदाहरण कोड का एक लिंक बहुत उपयोगी होगा। –

+0

@ रॉबर्ट, आप सही हैं। मैं एक जवाब खोजने में विफल रहा और छोड़ दिया। अगर आपको कोई समाधान मिल जाए तो मुझे बताएं। – HM1

+2

मैंने कुछ मामलों को लागू करने का एक मूल उदाहरण रखा है जहां आप इनपुट दृश्यों को कस्टमाइज़ करना चाहते हैं, उम्मीद है कि कुछ मदद की है। अद्यतन उत्तर देखें। – Jonah

3

सबसे पहले दृश्य बनाने (मैं इसे एक अलग में किया था निब फ़ाइल और इसे इस तरह) लोड:

NSArray *views = [[NSBundle mainBundle] loadNibNamed:@"ReducedNumericKeyboardView" 
                owner:self 
               options:nil]; 
    keyBView = (ReducedNumericKeyboardView*)[views objectAtIndex:0]; 

यह करने के बाद, मैं इसे पाठ क्षेत्र जहां मैं इसे (उपयोग करना चाहते हैं और वास्तव में, यह आपके सवाल का संक्षिप्त उत्तर है के लिए इनपुट दृश्य के रूप में सेट;)) :

[self.propertyEditor setInputView:keyBView]; 

जब क्षेत्र मैं दृश्य पिल्ला स्क्रॉल (यदि आवश्यक हो) क्षेत्र को कवर नहीं करने के लिए क्या में क्लिक करने:

CGRect textFieldRect = [self.tableViewController.view.window convertRect:propertyEditor.bounds fromView:propertyEditor]; 
CGRect viewRect = [self.tableViewController.view.window convertRect:self.tableViewController.view.bounds fromView:self.tableViewController.view]; 
CGFloat midLine = textFieldRect.origin.y+.5*textFieldRect.size.height; 

CGFloat numerator = midLine - viewRect.origin.y - MINIMUM_SCROLL_FRACTION*viewRect.size.height; 
CGFloat denominator = (MAXIMUM_SCROLL_FRACTION - MINIMUM_SCROLL_FRACTION)*viewRect.size.height; 
CGFloat heightFraction = MIN(1, MAX(0, numerator/denominator)); 

animateDistance = floor(PORTRAIT_USER_INPUT_VIEW_HEIGHT*heightFraction); 

CGRect viewFrame = self.tableViewController.view.frame; 
viewFrame.origin.y -= animateDistance; 
[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationBeginsFromCurrentState:YES]; 
[UIView setAnimationDuration:USER_INPUT_ANIMATION_DURATION]; 
[self.tableViewController.view setFrame:viewFrame]; 
[UIView commitAnimations]; 

जब संपादन समाप्त हो गया है, मैं दृश्य नीचे स्क्रॉल करें:

 CGRect viewFrame = self.tableViewController.view.frame; 
     viewFrame.origin.y += animateDistance; 
     [UIView beginAnimations:nil context:NULL]; 
     [UIView setAnimationBeginsFromCurrentState:YES]; 
     [UIView setAnimationDuration:USER_INPUT_ANIMATION_DURATION]; 
     [self.tableViewController.view setFrame:viewFrame]; 
     [UIView commitAnimations]; 

की कमी मैं का उपयोग इस प्रकार सेट कर रहे हैं:

static const CGFloat USER_INPUT_ANIMATION_DURATION = 0.3; 
static const CGFloat PORTRAIT_USER_INPUT_VIEW_HEIGHT = 180; 

static const CGFloat MINIMUM_SCROLL_FRACTION = 0.1; 
static const CGFloat MAXIMUM_SCROLL_FRACTION = 0.2; 
+0

इस प्रश्न पर कोई सुधार करता है, क्योंकि आप में से कुछ ने कुछ शोध किया है (और एक समाधान मिल सकता है), अगर आपको कुछ उपयोगी मिला है तो कृपया पोस्ट करें ...। –

2

दुर्भाग्य से, उपरोक्त संदर्भित "आईओएस के लिए टेक्स्ट, वेब और संपादन प्रोग्रामिंग गाइड" किसी कुंजी को दबाए जाने के बाद चरित्र के साथ क्या करना है, इस बारे में कोई जानकारी नहीं देता है। आईओएस में कीबोर्ड लागू करते समय यह कठिन हिस्सा है।

मैंने हेक्स नंबरपैड का एक पूर्ण कार्य उदाहरण बनाया है जिसे आसानी से आपको अनुकूलित करने के साथ अनुकूलित किया जा सकता है। https://stackoverflow.com/a/13351686/937822

5

आप Github पर Custom-iOS-Keyboards लाइब्रेरी का उपयोग कर सकते हैं:

विशिष्ट विवरण इस विषय पर मेरे दूसरे जवाब पर हैं।

2

आप के लिए

inputView 
अपने UITextField पर

मूल्य निर्धारित करना चाहते हैं। आपके द्वारा प्रदान किए गए दृश्य में आपको एक नया कीबोर्ड या इनपुट तंत्र पूरी तरह कार्यान्वित करने की आवश्यकता होगी।

वैकल्पिक रूप से,

inputAccessoryView 

कार्यक्षमता की एक छोटी राशि में जोड़ने के लिए इस्तेमाल किया जा सकता। दृश्य सिस्टम कीबोर्ड के ऊपर रखा जाएगा और पहुंच जाएगा और इसके साथ खारिज कर दिया जाएगा।

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