ไม่พบ keyplane ที่รองรับ type 4 สำหรับคีย์บอร์ด iPhone-Portrait-NumberPad; โดยใช้ 3876877096_Portrait_iPhone-Simple-Pad_Default


114

ฉันดาวน์โหลด iOS 8 Gold Master สำหรับ iPhone และ SDK แล้ว

ฉันทดสอบแอปแล้วและใช้งานได้ดียกเว้นสิ่งเดียว

ฉันมีช่องข้อความที่แป้นตัวเลขจะปรากฏขึ้นหากผู้ใช้ต้องการพิมพ์บางสิ่งนอกจากนี้ปุ่มที่กำหนดเองจะถูกเพิ่มลงในพื้นที่ว่างเมื่อแป้นพิมพ์ปรากฏขึ้น

- (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];
            }
        }
    }

}

สิ่งนี้ใช้งานได้ดีจนถึงตอนนี้

ก่อนอื่นฉันได้รับคำเตือนนี้:

ไม่พบ keyplane ที่รองรับ type 4 สำหรับคีย์บอร์ด iPhone-Portrait-NumberPad; โดยใช้ 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;
    }
}

หวังว่านี่จะช่วยได้

แต่ฉันยังคงได้รับคำเตือนนี้:

ไม่พบ keyplane ที่รองรับ type 4 สำหรับคีย์บอร์ด iPhone-Portrait-NumberPad; โดยใช้ 3876877096_Portrait_iPhone-Simple-Pad_Default

ไม่สนใจคำเตือนนี้ฉันก็ใช้งานได้ โปรดแจ้งให้เราทราบหากคุณสามารถบรรเทาจากคำเตือนนี้ได้


ทำงานได้ดีสำหรับฉัน ขอบคุณเพื่อน
CRAZYSNAKE

สำหรับ addDoneButton หรือ removeDoneButton: stackoverflow.com/questions/26031798/…ฉันรันโค้ดด้านบนใน XCode-5.1.1 ในอุปกรณ์ iOS-6/7/8 ทำงานได้อย่างสมบูรณ์
alishaik786

1
- (โมฆะ) doneButton: (UIButton *) ผู้ส่ง {NSLog (@ "fdsfdsdsf"); }
SampathKumar

ฉันทำสิ่งนี้ทั้งหมดแล้ว แต่ปุ่มเสร็จแล้วคลิกไม่ได้คุณช่วยฉันได้ไหม
SergStav

ด้วย iOS 8.3 รุ่นล่าสุดขึ้นไปมีการเปลี่ยนแปลงที่ทำให้รหัสที่โพสต์ก่อนหน้านี้ล้มเหลว ฉันได้เพิ่มการตรวจสอบสำหรับ iOS 8.3 ขึ้นไปมันอาจหยุดทำงานสำหรับ iOS เวอร์ชันอนาคต โปรดตรวจสอบด้านบน
iGW

143

ฉันก็ประสบปัญหานี้เช่นกันหลังจากอัปเดตเป็น Xcode Beta ล่าสุด การตั้งค่าบนเครื่องจำลองจะได้รับการรีเฟรชดังนั้นจึงตรวจพบแป้นพิมพ์แล็ปท็อป (ภายนอก) หากคุณเพียงแค่กด:

iOS Simulator -> ฮาร์ดแวร์ -> คีย์บอร์ด -> เชื่อมต่อคีย์บอร์ดฮาร์ดแวร์

เพื่อให้รายการนั้นถูกยกเลิกการเลือกจากนั้นแป้นพิมพ์ซอฟต์แวร์จะปรากฏขึ้นอีกครั้ง


14
ฉันอาจกด Shift + Cmd + K โดยไม่ได้ตั้งใจ!
Eric

1
iOS Simulator -> ฮาร์ดแวร์ -> คีย์บอร์ด -> เชื่อมต่อคีย์บอร์ดฮาร์ดแวร์ยกเลิกการเลือกและแก้ไขแล้ว
EFE

นี่เป็นเพียงการข้ามการตรวจสอบที่ทำให้เกิดข้อผิดพลาดเมื่อคุณอยู่ในโปรแกรมจำลองเท่านั้นการแลกเปลี่ยนข้อผิดพลาดและแป้นพิมพ์จะยังคงเกิดขึ้นในโลกแห่งความเป็นจริงบนอุปกรณ์จริง
Zack

หากไม่ได้ผลให้เลือก Simulator -> Hardware -> ลบเนื้อหาและการตั้งค่าทั้งหมด
วิมุกธีราชปักษา

1
สำหรับเวอร์ชัน 11.5; iOS Simulator -> I / O -> Keyboard -> Connect Hardware Keyboard
miletliyusuf

40

โปรแกรมจำลองพยายามค้นหาแป้นพิมพ์ตัวเลขบนเครื่อง Mac แต่ไม่พบ (MacBook Pro, MacBook Air และแป้นพิมพ์ "ปกติ / เล็ก" ไม่มี) คุณสามารถยกเลิกการเลือกตัวเลือกเชื่อมต่อแป้นพิมพ์ฮาร์ดแวร์หรือเพิกเฉยต่อข้อความแสดงข้อผิดพลาดจะไม่มีผลเสียต่อแอปพลิเคชัน


16

เพียงแค่ไปที่

iOS Simulator -> ฮาร์ดแวร์ -> คีย์บอร์ด -> ยกเลิกการเลือกตัวเลือก Connect Hardware Keyboard

วิธีนี้จะแก้ไขปัญหาได้

แป้นพิมพ์ MAC ของคุณจะไม่ทำงานหลังจากทำตามขั้นตอนข้างต้นคุณต้องใช้แป้นพิมพ์จำลอง


12

ฉันใช้ xcode กับ ios 8 เพียงแค่ยกเลิกการเลือกตัวเลือกแป้นพิมพ์เชื่อมต่อฮาร์แวร์ใน Simulator-> Hardware-> Keyboard-> Connect Hardware Keyboard

วิธีนี้จะช่วยแก้ปัญหาได้


ไม่รู้จริงๆว่าโปรแกรมจำลอง iOS นี้อยู่ที่ไหน หรือฮาร์ดแวร์อยู่ที่ไหน? คุณกำลังพูดถึงเครื่องจำลองที่แท้จริงเหมือนกับของที่ดูเหมือน iPhone และฉันพบฮาร์ดแวร์หรือไม่?
โทมัส

7

ฉันมีปัญหาเดียวกันใน Xcode 8.1 และ iOS 10.1 สิ่งที่ใช้ได้ผลสำหรับฉันคือไปที่ Simulator-> Hardware-> Keyboard และยกเลิกการเลือก Connect Hardware Keyboard


7

ไปที่ Simulator-> Hardware-> Keyboard และยกเลิกการเลือก Connect Hardware Keyboard

เช่นเดียวกับหลาย ๆ คำตอบข้างต้นแต่ไม่ได้เปลี่ยนแปลงสำหรับฉันจนกว่าฉันจะปิดและเริ่มโปรแกรมจำลองใหม่ xcode 8.2.1 และ Simulator 10.0


5

เรียกใช้แอปโดยใช้โปรแกรมจำลอง

iOS Simulator-> ฮาร์ดแวร์ -> คีย์บอร์ด -> iOS ใช้รูปแบบเดียวกับ OS X

วิธีนี้จะแก้ไขปัญหาได้หากมีใครใช้งานแอปบนอุปกรณ์ของตน


3

ฉันได้รับข้อความแสดงข้อผิดพลาดเดียวกันด้วยเหตุผลสองประการที่แยกจากกันดังนั้นคุณสามารถเพิ่มลงในรายการตรวจสอบการแก้ไขข้อบกพร่องของคุณ:

บริบท: Xcode 6.4, iOS: 8.4 ฉันกำลังเพิ่มแถบเครื่องมือพร้อมกำหนดเองUIBarButtonเพื่อโหลดด้วยUIKeyboardTypeNumberPad(Swift:) UIKeyboardType.numberPadคือ "เสร็จสิ้น" และ "+/-" ฉันมีปัญหานี้เมื่อ:

  1. UIToolbar ของฉันถูกประกาศเป็นคุณสมบัติ แต่ฉันลืมที่จะจัดสรร / เริ่มต้นอย่างชัดเจน

  2. ฉันออกจากบรรทัดสุดท้าย[myCustomToolbar sizeToFit];ซึ่งดูเหมือนว่าเป็นตระกูลเดียวกับคำตอบของ Holden (รหัสของฉันที่นี่: https://stackoverflow.com/a/32016397/4898050 )

โชคดี


2

ในแอป iOS ของคุณไม่พบแป้นพิมพ์ตัวเลขที่แนบมากับ OS X ของคุณดังนั้นคุณเพียงแค่ต้องยกเลิกการเลือกตัวเลือกเชื่อมต่อแป้นพิมพ์ฮาร์ดแวร์ในโปรแกรมจำลองของคุณในเส้นทางต่อไปนี้เพื่อการทดสอบเท่านั้น:

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

บางทีคุณควรรีเซ็ตเฟรมของปุ่มฉันก็มีปัญหาเหมือนกันและ nslog มุมมองของแป้นพิมพ์เช่นนี้:

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 และต่ำกว่าเมื่อฉันได้รับข้อผิดพลาดที่คล้ายกัน สามารถสังเกตได้หลังจากเรียกใช้แอปและดูผ่าน 'ลำดับชั้นของมุมมอง' (เช่นคลิกที่ไอคอน 'ดูลำดับชั้น' จากแถบพื้นที่ดีบักในขณะที่แอปกำลังทำงานบนอุปกรณ์และตรวจสอบมุมมองของคุณใน Storyboard) แป้นพิมพ์จะแสดงอยู่ หน้าต่างที่แตกต่างกันใน iOS 9 เมื่อเทียบกับ iOS 8 และเวอร์ชันที่ต่ำกว่าและต้องได้รับการพิจารณา 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;
    }
}

และนี่คือวิธีที่คุณสามารถลบKeyboardButtonจากแป้นพิมพ์ได้หากคุณต้องการ

- (void)removeKeyboardButton {

id windowTemp = [self addButtonToKeyboard];

if (windowTemp) {

    for (UIView *doneButton in [windowTemp subviews]) {
        if ([doneButton isKindOfClass:[UIButton class]]) {
            [doneButton setHidden:TRUE];
        }
    }
  }
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.