2009-10-22 15 views
8

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

क्या टेक्स्ट नियंत्रण के व्यवहार में शामिल होने का कोई तरीका है, इसलिए मैं अपने कीबोर्ड का आसानी से उपयोग करता हूं?

धन्यवाद, विक

+0

मुझे आशा है कि आपका ग्राहक ऐप स्टोर में इस (संभवतः गैर-गेम) ऐप को सबमिट करने का इरादा नहीं रखता है ... –

+0

क्यों नहीं? _______ –

+0

आईफोन के कोर यूआई घटक को बदलना? –

उत्तर

11

यहां एक विचार है: मौजूदा कीबोर्ड को अपनी आवश्यकताओं के अनुसार संशोधित करें। अपने modifyKeyboard विधि में,

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

तब:: सबसे पहले, जब यह स्क्रीन पर दिखाई देता सूचित कर दिया रजिस्टर

- (void)modifyKeyboard:(NSNotification *)notification 
{ 
    UIView *firstResponder = [[[UIApplication sharedApplication] keyWindow] performSelector:@selector(firstResponder)]; 

    for (UIWindow *keyboardWindow in [[UIApplication sharedApplication] windows]) 
     for (UIView *keyboard in [keyboardWindow subviews]) 
      if([[keyboard description] hasPrefix:@"<UIKeyboard"] == YES) 
      { 
       MyFancyKeyboardView *customKeyboard = [[MyFancyKeyboardView alloc] initWithFrame: CGRectMake(0, 0, keyboard.frame.size.width, keyboard.frame.size.height); 
       [keyboard addSubview: customKeyboard]; 
       [customKeyboard release]; 
      } 
} 

यह मूल कीबोर्ड के शीर्ष पर आपके विचार कहते हैं, तो सुनिश्चित करें कि आप यह कर कर न झिल्लड़।

+0

एक और दिलचस्प विचार, धन्यवाद, मैं इसे भी आज़मा दूंगा, धन्यवाद। – vickirk

0

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

मैं यह नहीं कह सकता कि ऐप्पल यह पसंद करेगा या नहीं, और आपको अपने स्वयं के व्यवहार लिखने में बहुत कठिन समय होगा जो अन्य कीबोर्ड की तरह कार्य करता है। इतना तो, कि इसे एक बुरा विचार घोषित किया जाना चाहिए।

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

+0

दुर्भाग्य से हमें जिस कुंजीपटल की आवश्यकता है वह वास्तव में केवल एक कीबोर्ड नहीं है जिसमें इसके पात्र हैं, इसमें कुछ वर्ण हैं (सच्चे तेह आराम इस मैननर में छिपाया जा सकता है) लेकिन ऐसे बटन हैं जो एक सिंगल चार टाइप करने से बहुत अधिक करते हैं ।सच है कि मैं कहीं और बटन जोड़ सकता हूं लेकिन यह काउंटर-अंतर्ज्ञानी होगा और भयानक लगेगा। मेरे पास पहले से ही आवश्यक कुंजीपटल काम कर रहा है, मुझे बस इसे आसानी से तार करने की ज़रूरत है, सिर्फ एंड्रॉइड पर स्पर्श सामग्री की इच्छा आईपॉड के रूप में एक लक्ष्य के रूप में स्थिर थी :-( – vickirk

7

जब तक आप ऐप स्टोर में अपना ऐप सबमिट नहीं कर रहे हैं, तब तक आप रनटाइम पर कोर कक्षाओं के तरीकों को गतिशील रूप से बदलने के लिए विधि swizzling नामक तकनीक का उपयोग कर सकते हैं। उदाहरण के लिए:

@interface UIControl(CustomKeyboard) 
- (BOOL)__my__becomeFirstResponder 
@end 

@implementation UIControl(CustomKeyboard) 
- (BOOL)__my__becomeFirstResponder 
{ 
    BOOL becameFirstResponder = [self __my__becomeFirstResponder]; 
    if ([self canBecomeFirstResponder]) { 
     [MyKeyboard orderFront]; 
    } 
    return becameFirstResponder; 
} 

+ (void)initialize 
{ 
    Method old = class_getInstanceMethod(self, @selector(becomeFirstResponder)); 
    Method new = class_getInstanceMethod(self, @selector(__my__becomeFirstResponder)); 
    method_exchangeImplementations(old, new); 
} 
@end 

कृपया इस तरह कुछ भी किसी भी उत्पादन कोड में उपयोग नहीं करते। इसके अलावा, मैंने वास्तव में इसका परीक्षण नहीं किया है, इसलिए वाईएमएमवी।

+0

एक दिलचस्प विचार, धन्यवाद, मैं इसे दूंगा कोशिश करें। – vickirk

10

आप इसे आईओएस 3.2 या बाद में कर सकते हैं। विवरण के लिए UITextField की इनपुट व्यू प्रॉपर्टी देखें।

+1

+1 एक अच्छे उत्तर के लिए :) –

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