कीबोर्ड-आईफ़ोन-पोर्ट्रेट-नंबरपैड के लिए टाइप 4 का समर्थन करने वाले की-प्लेन को नहीं खोज सकते; 3876877096_Portrait_iPhone-Simple-Pad_Default का उपयोग कर


114

मैंने iPhone और SDK के लिए iOS 8 गोल्ड मास्टर डाउनलोड किया है।

मैंने ऐप का परीक्षण किया और यह ठीक काम करता है, केवल एक चीज को छोड़कर।

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

- (void)addButtonToKeyboard
{
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
    {
        // create custom button
        UIButton * doneButton = [UIButton buttonWithType:UIButtonTypeCustom];
        doneButton.frame = CGRectMake(-2, 163, 106, 53);
        doneButton.adjustsImageWhenHighlighted = NO;
        [doneButton setImage:[UIImage imageNamed:@"DoneUp.png"] forState:UIControlStateNormal];
        [doneButton setImage:[UIImage imageNamed:@"DoneDown.png"] forState:UIControlStateHighlighted];
        [doneButton addTarget:self action:@selector(saveNewLead:) forControlEvents:UIControlEventTouchUpInside];

        // locate keyboard view
        UIWindow * tempWindow = [[[UIApplication sharedApplication] windows]objectAtIndex:1];
        UIView* keyboard;
        for(int i=0; i<[tempWindow.subviews count]; i++) 
        {
            keyboard = [tempWindow.subviews objectAtIndex:i];

            // keyboard view found; add the custom button to it
            if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 3.2) {
                if([[keyboard description] hasPrefix:@"<UIPeripheralHost"] == YES)
                    [keyboard addSubview:doneButton];
            } else {
                if([[keyboard description] hasPrefix:@"<UIKeyboard"] == YES)
                    [keyboard addSubview:doneButton];
            }
        }
    }

}

यह अब तक ठीक काम कर रहा था।

सबसे पहले, मुझे यह चेतावनी मिल रही है:

कीबोर्ड-आईफ़ोन-पोर्ट्रेट-नंबरपैड के लिए टाइप 4 का समर्थन करने वाले की-प्लेन को नहीं खोज सकते; 3876877096_Portrait_iPhone-Simple-Pad_Default का उपयोग कर

फिर वह कस्टम बटन भी नहीं दिख रहा है, जो मुझे लगता है कि इन 2 लाइनों के कारण है:

if([[keyboard description] hasPrefix:@"<UIPeripheralHost"] == YES)

तथा

if([[keyboard description] hasPrefix:@"<UIKeyboard"] == YES)

कोई सुझाव?

जवाबों:


10

मुझे भी यह समस्या थी और इसका हल मिला।

नीचे कोड है जो iOS 8.0 के लिए और नीचे के संस्करणों के लिए भी काम करेगा।

मैंने इसे iOS 7 और 8.0 (Xcode संस्करण 6.0.1) पर परीक्षण किया है

- (void)addButtonToKeyboard
    {
    // create custom button
    self.doneButton = [UIButton buttonWithType:UIButtonTypeCustom];
            //This code will work on iOS 8.3 and 8.4. 
       if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.3) {
            self.doneButton.frame = CGRectMake(0, [[UIScreen mainScreen]   bounds].size.height - 53, 106, 53);
      } else {
           self.doneButton.frame = CGRectMake(0, 163+44, 106, 53);
      }

    self.doneButton.adjustsImageWhenHighlighted = NO;
    [self.doneButton setTag:67123];
    [self.doneButton setImage:[UIImage imageNamed:@"doneup1.png"] forState:UIControlStateNormal];
    [self.doneButton setImage:[UIImage imageNamed:@"donedown1.png"] forState:UIControlStateHighlighted];

    [self.doneButton addTarget:self action:@selector(doneButton:) forControlEvents:UIControlEventTouchUpInside];

    // locate keyboard view
    int windowCount = [[[UIApplication sharedApplication] windows] count];
    if (windowCount < 2) {
        return;
    }

    UIWindow *tempWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:1];
    UIView *keyboard;

    for (int i = 0; i < [tempWindow.subviews count]; i++) {
        keyboard = [tempWindow.subviews objectAtIndex:i];
             // keyboard found, add the button
          if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.3) {

            UIButton *searchbtn = (UIButton *)[keyboard viewWithTag:67123];
            if (searchbtn == nil)
                [keyboard addSubview:self.doneButton];

            } else {   
                if([[keyboard description] hasPrefix:@"<UIPeripheralHost"] == YES) {
              UIButton *searchbtn = (UIButton *)[keyboard viewWithTag:67123];
                   if (searchbtn == nil)//to avoid adding again and again as per my requirement (previous and next button on keyboard)
                [keyboard addSubview:self.doneButton];

        } //This code will work on iOS 8.0
        else if([[keyboard description] hasPrefix:@"<UIInputSetContainerView"] == YES) {

            for (int i = 0; i < [keyboard.subviews count]; i++)
            {
                UIView *hostkeyboard = [keyboard.subviews objectAtIndex:i];

                if([[hostkeyboard description] hasPrefix:@"<UIInputSetHost"] == YES) {
                    UIButton *donebtn = (UIButton *)[hostkeyboard viewWithTag:67123];
                    if (donebtn == nil)//to avoid adding again and again as per my requirement (previous and next button on keyboard)
                        [hostkeyboard addSubview:self.doneButton];
                }
            }
        }
      }
    }
 }

>

- (void)removedSearchButtonFromKeypad 
    {

    int windowCount = [[[UIApplication sharedApplication] windows] count];
    if (windowCount < 2) {
        return;
    }

    UIWindow *tempWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:1];

    for (int i = 0 ; i < [tempWindow.subviews count] ; i++)
    {
        UIView *keyboard = [tempWindow.subviews objectAtIndex:i];

           if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.3){
                [self removeButton:keyboard];                  
            } else if([[keyboard description] hasPrefix:@"<UIPeripheralHost"] == YES) {
                  [self removeButton:keyboard];

             } else if([[keyboard description] hasPrefix:@"<UIInputSetContainerView"] == YES){

            for (int i = 0 ; i < [keyboard.subviews count] ; i++)
            {
                UIView *hostkeyboard = [keyboard.subviews objectAtIndex:i];

                if([[hostkeyboard description] hasPrefix:@"<UIInputSetHost"] == YES) {
                    [self removeButton:hostkeyboard];
                }
            }
        }
    }
}


- (void)removeButton:(UIView *)keypadView 
    {
    UIButton *donebtn = (UIButton *)[keypadView viewWithTag:67123];
    if(donebtn) {
        [donebtn removeFromSuperview];
        donebtn = nil;
    }
}

उम्मीद है की यह मदद करेगा।

लेकिन, मुझे अभी भी यह चेतावनी मिल रही है:

कीबोर्ड-आईफ़ोन-पोर्ट्रेट-नंबरपैड के लिए टाइप 4 का समर्थन करने वाले की-प्लेन को नहीं खोज सकते; 3876877096_Portrait_iPhone-Simple-Pad_Default का उपयोग कर

इस चेतावनी को नजरअंदाज करते हुए मुझे काम करने लगा। कृपया, मुझे बताएं कि क्या आप इस चेतावनी से राहत पा सकते हैं।


मेरे लिए बहुत अच्छा काम किया। धन्यवाद दोस्त।
CRAZYSNAKE

AddDoneButton या removeDoneButton के लिए: stackoverflow.com/questions/26031798/… मैं iOS-6/7/8 डिवाइस में XCode-5.1.1 में उपरोक्त कोड चलाता हूं। पूरी तरह से काम करना।
alishaik786 15

1
- (शून्य) किए गए बट्टन: (यूआईबेटन *) प्रेषक {NSLog (@ "fdsfdsdsf)"; }
संपतकुमार

मैंने यह सभी कार्य किए लेकिन किया हुआ बटन क्लिक करने योग्य नहीं है, क्या आप मुझे ले सकते हैं?
SergStav

IOS 8.3 और इसके बाद के संस्करण की नवीनतम रिलीज के साथ कुछ बदल गया है जो पिछले पोस्ट किए गए कोड को विफल करता है। मैंने iOS 8.3 और इसके बाद के संस्करण के लिए चेक जोड़ा है, यह भविष्य के iOS संस्करण के लिए काम करना बंद कर सकता है। कृपया ऊपर देखें।
IGW

143

मुझे नवीनतम Xcode बीटा में अपडेट करने के बाद भी यह समस्या थी। सिम्युलेटर पर सेटिंग्स ताज़ा हो जाती हैं, इसलिए लैपटॉप (बाहरी) कीबोर्ड का पता लगाया जा रहा था। यदि आप बस दबाते हैं:

iOS सिम्युलेटर -> हार्डवेयर -> कीबोर्ड -> कनेक्ट हार्डवेयर कीबोर्ड

ताकि प्रविष्टि UNchecked हो, तब सॉफ्टवेयर कीबोर्ड एक बार फिर प्रदर्शित होगा।


14
मैं शायद गलती से Shift + Cmd + K मारा!
एरिक

1
iOS सिम्युलेटर -> हार्डवेयर -> कीबोर्ड -> कनेक्ट हार्डवेयर कीबोर्ड इसे अनचेक करें और इसे हल किया गया
EFE

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

यदि यह काम नहीं करता है, तो सिम्युलेटर -> हार्डवेयर -> सभी सामग्री और सेटिंग्स मिटा दें।
विमुक्ति राजपक्ष

1
संस्करण 11.5 के लिए; iOS सिम्युलेटर -> I / O -> कीबोर्ड -> हार्डवेयर कीबोर्ड कनेक्ट करें
miletliyusuf

40

एमुलेटर मैक पर एक संख्यात्मक कीपैड खोजने की कोशिश करता है, लेकिन यह नहीं पाया जाता है (मैकबुक प्रो, मैकबुक एयर और "सामान्य / छोटे" कीबोर्ड के पास नहीं है)। आप हार्डवेयर कीबोर्ड कनेक्ट करें विकल्प को अचयनित कर सकते हैं या बस त्रुटि संदेश को अनदेखा कर सकते हैं, इससे एप्लिकेशन पर कोई नकारात्मक प्रभाव नहीं पड़ेगा।


16

बस जाओ

iOS सिम्युलेटर -> हार्डवेयर -> कीबोर्ड -> कनेक्ट हार्डवेयर कीबोर्ड विकल्प को अनचेक करें।

इससे समस्या ठीक हो जाएगी।

उपरोक्त चरण को पूरा करने के बाद आपका मैक कीबोर्ड काम नहीं करेगा, आपको सिम्युलेटर कीबोर्ड का उपयोग करना होगा।


12

मैं ios 8 के साथ xcode का उपयोग कर रहा हूं, बस अपने सिम्युलेटर-> हार्डवेयर-> कीबोर्ड-> कनेक्ट हार्डवेयर कीबोर्ड में कनेक्ट हार्बर कीबोर्ड विकल्प को अनचेक करें।

इससे समस्या सुलझ जाएगी।


सचमुच यह आईओएस सिम्युलेटर कहां है, इसका कोई अंदाजा नहीं है। या हार्डवेयर कहाँ है? आप वास्तविक सिम्युलेटर के बारे में बात कर रहे हैं जैसे कि आईफोन जैसा दिखता है, और इसके माध्यम से मुझे हार्डवेयर मिलता है?
थॉमस

7

मुझे Xcode 8.1 और iOS 10.1 में भी यही समस्या थी। मेरे लिए जो काम किया गया वह सिम्युलेटर-> हार्डवेयर-> कीबोर्ड और कनेक्ट हार्डवेयर कीबोर्ड को अनचेक करना था।


7

सिमुलेटर-> हार्डवेयर-> कीबोर्ड में जाएं और कनेक्ट हार्डवेयर कीबोर्ड को अनचेक करें।

BUT से ऊपर के कई उत्तर मेरे लिए तब तक नहीं बदले जब तक कि मैंने सिम्युलेटर को छोड़ दिया और पुनः आरंभ नहीं किया। xcode 8.2.1 और सिम्युलेटर 10.0।


5

सिम्युलेटर का उपयोग करके एप्लिकेशन चलाएं

iOS सिम्युलेटर-> हार्डवेयर-> कीबोर्ड -> iOS OS X के समान लेआउट का उपयोग करता है

यह समस्या को ठीक करेगा यदि कोई भी व्यक्ति अपने डिवाइस पर अपना ऐप चला रहा है


3

मुझे दो अलग-अलग कारणों से एक ही त्रुटि संदेश मिला, इसलिए आप उन्हें अपनी डिबगिंग चेकलिस्ट में जोड़ सकते हैं:

संदर्भ: Xcode 6.4, iOS: 8.4। मैं कस्टम टूल के साथ एक टूलबार जोड़ रहा था (स्विफ्ट:) , UIBarButtonजिसे "संपन्न" और "+/-" नाम दिया गया है। मुझे यह समस्या थी जब:UIKeyboardTypeNumberPadUIKeyboardType.numberPad

  1. मेरे UIToolbar को एक संपत्ति के रूप में घोषित किया गया था, लेकिन मैं इसे स्पष्ट रूप से आवंटित / इनिट करना भूल गया था।

  2. मैंने पिछली पंक्ति को छोड़ दिया था [myCustomToolbar sizeToFit];, जो लगता है कि यह होल्डन के उत्तर के समान परिवार है (मेरा कोड यहां: https://stackoverflow.com/a/32016397/4898050 )।

सौभाग्य


2

आपके iOS ऐप में आपके ओएस एक्स से जुड़ा एक न्यूमेरिक कीपैड नहीं मिल सकता है। इसलिए आपको सिर्फ परीक्षण उद्देश्य के लिए निम्नलिखित पथ में अपने कीबोर्ड में हार्डवेयर कीबोर्ड विकल्प को अनचेक करने की आवश्यकता है:

Simulator -> Hardware -> Keyboard -> Connect Hardware Keyboard

इससे उपरोक्त समस्या का समाधान हो जाएगा।

मुझे लगता है कि आपको नीचे दिए गए लिंक को भी देखना चाहिए। यह कहते हैं कि यह एक bugमें है XCode है कि फोरम पोस्ट धागा के अंत में!

संदर्भ


1

वितरण प्रोविजनिंग प्रोफाइल का उपयोग करने में मुझे यही समस्या थी। जांचें कि आप डेवलपर प्रोफ़ाइल का उपयोग करते हैं


1

लंबे कोड और UIToolbar का उपयोग क्यों नहीं किया जाता है? चूंकि चेतावनी अभी भी कायम है?

UIToolbar यहां किसी भी iOS संस्करण के लिए मेरा नमूना कोड काम कर रहा है

UIToolbar *doneToolbar = [[UIToolbar alloc] initWithFrame:(CGRect){0, 0, 50, 50}]; // Create and init
doneToolbar.barStyle = UIBarStyleBlackTranslucent; // Specify the preferred barStyle
doneToolbar.items = @[
[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil], 
[[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStylePlain target:self action:@selector(doneEditAction)] // Add your target action
]; // Define items -- you can add more

yourField.inputAccessoryView = doneToolbar; // Now add toolbar to your field's inputview and run
[doneToolbar sizeToFit]; // call this to auto fit to the view

- (void)doneEditAction {
    [self.view endEditing:YES];
}

0

हो सकता है कि आपको बटन के फ्रेम को रीसेट करना चाहिए, मुझे कुछ समस्या थी, और इस तरह कीबोर्ड के दृश्य को रोकें:

iOS8:

"<UIInputSetContainerView: 0x7fef0364b0d0; frame = (0 0; 320 568); autoresize = W+H; layer = <CALayer: 0x7fef0364b1e0>>"

before8:

"<UIPeripheralHostView: 0x11393c860; frame = (0 352; 320 216); autoresizesSubviews = NO; layer = <CALayer: 0x11393ca10>>"

-1

ठीक है यहाँ IOS 9, iOS 8 और नीचे दोनों में एक ऐप को दिखाने और काम करने के लिए 'किया' बटन प्राप्त करने के लिए एक साधारण फिक्स है जब मैं इसी तरह की त्रुटि करता हूं। किसी ऐप को चलाने और 'व्यूज़ हायरार्की' के माध्यम से देखने के बाद इसका अवलोकन किया जा सकता है (यानी डिबग एरिया बार से 'व्यू पदानुक्रम' आइकन पर क्लिक करते समय ऐप डिवाइस पर चल रहा है और स्टोरीबोर्ड में आपके विचारों का निरीक्षण कर रहा है ), कि कीबोर्ड पर प्रस्तुत किया गया है iOS 8 और उससे नीचे के संस्करणों की तुलना में iOS 9 में अलग-अलग विंडो का हिसाब देना होगा। addButtonToKeyboard

- (id)addButtonToKeyboard
{
if (!doneButton)
{
   // create custom button
    UIButton * doneButton = [UIButton buttonWithType:UIButtonTypeCustom];
    doneButton.frame = CGRectMake(-2, 163, 106, 53);
    doneButton.adjustsImageWhenHighlighted = NO;
    [doneButton setImage:[UIImage imageNamed:@"DoneUp.png"] forState:UIControlStateNormal];
    [doneButton setImage:[UIImage imageNamed:@"DoneDown.png"] forState:UIControlStateHighlighted];
    [doneButton addTarget:self action:@selector(saveNewLead:) forControlEvents:UIControlEventTouchUpInside];
}

NSArray *windows = [[UIApplication sharedApplication] windows];
//Check to see if running below iOS 9,then return the second window which bears the keyboard   
if ([[[UIDevice currentDevice] systemVersion] floatValue] < 9.0) {
return windows[windows.count - 2];
}
else {
UIWindow* keyboardWithDoneButtonWindow = [ windows lastObject];
return keyboardWithDoneButtonWindow;
    }
}

और यह है कि आप कीबोर्ड से कीबोर्ड को हटा सकते हैं यदि आप चाहें तो।

- (void)removeKeyboardButton {

id windowTemp = [self addButtonToKeyboard];

if (windowTemp) {

    for (UIView *doneButton in [windowTemp subviews]) {
        if ([doneButton isKindOfClass:[UIButton class]]) {
            [doneButton setHidden:TRUE];
        }
    }
  }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.