Tidak dapat menemukan keyplane yang mendukung tipe 4 untuk keyboard iPhone-Portrait-NumberPad; menggunakan 3876877096_Portrait_iPhone-Simple-Pad_Default

114

Saya telah mengunduh iOS 8 Gold Master untuk iPhone dan SDK.

Saya menguji aplikasi dan berfungsi dengan baik, kecuali untuk satu hal.

Saya memiliki kolom teks di mana tombol angka akan muncul jika pengguna ingin mengetik sesuatu, selain itu, tombol kustom ditambahkan ke area kosong saat keyboard muncul.

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

}

Ini bekerja dengan baik sampai sekarang.

Pertama-tama, saya mendapatkan peringatan ini:

Tidak dapat menemukan keyplane yang mendukung tipe 4 untuk keyboard iPhone-Portrait-NumberPad; menggunakan 3876877096_Portrait_iPhone-Simple-Pad_Default

maka tombol ubahsuaian itu juga tidak muncul, yang menurut saya karena 2 baris ini:

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

dan

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

Ada saran?

CRAZYSNAKE
sumber

Jawaban:

10

Saya juga mengalami masalah ini dan menemukan solusinya.

Di bawah ini adalah kode yang akan berfungsi untuk iOS 8.0 dan juga untuk versi di bawah ini.

Saya telah mengujinya di iOS 7 dan 8.0 (Xcode Versi 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;
    }
}

Semoga ini membantu.

Tapi, saya masih mendapatkan peringatan ini:

Tidak dapat menemukan keyplane yang mendukung tipe 4 untuk keyboard iPhone-Portrait-NumberPad; menggunakan 3876877096_Portrait_iPhone-Simple-Pad_Default

Mengabaikan peringatan ini, saya membuatnya berfungsi. Harap beri tahu saya jika Anda bisa mendapatkan kelegaan dari peringatan ini.

iGW
sumber
Bekerja dengan baik untuk saya. Terima kasih sobat.
CRAZYSNAKE
Untuk addDoneButton atau removeDoneButton: stackoverflow.com/questions/26031798/… Saya menjalankan kode di atas di XCode-5.1.1 di perangkat iOS-6/7/8. Bekerja dengan sempurna.
alishaik786
1
- (void) doneButton: (UIButton *) sender {NSLog (@ "fdsfdsdsf"); }
SampathKumar
Saya melakukan semua tindakan ini tetapi tombol selesai tidak dapat diklik, dapatkah Anda membantu saya?
SergStav
Dengan rilis terbaru iOS 8.3 dan di atasnya ada sesuatu yang berubah yang gagal dari kode yang diposting sebelumnya. Saya telah menambahkan cek untuk iOS 8.3 dan di atasnya, Ini mungkin berhenti bekerja untuk versi iOS yang akan datang. Silakan periksa di atas.
iGW
143

Saya juga mengalami masalah ini setelah memperbarui ke Xcode Beta terbaru. Pengaturan pada simulator di-refresh, sehingga keyboard (eksternal) laptop terdeteksi. Jika Anda cukup menekan:

Simulator iOS -> Perangkat Keras -> Keyboard -> Hubungkan Keyboard Perangkat Keras

sehingga entri tidak dicentang maka keyboard perangkat lunak akan ditampilkan sekali lagi.

aquagremlin.dll
sumber
14
Saya mungkin salah menekan Shift + Cmd + K!
Eric
1
Simulator iOS -> Perangkat Keras -> Keyboard -> Hubungkan Keyboard Perangkat Keras hapus centangnya dan diselesaikan
EFE
Ini hanya melewatkan pemeriksaan yang melempar kesalahan saat Anda berada di simulator - bug dan pertukaran keyboard akan tetap terjadi di dunia nyata pada perangkat nyata.
Zack
Jika ini tidak berhasil, pilih Simulator -> Hardware -> Hapus semua konten dan pengaturan.
Wimukthi Rajapaksha
1
Untuk Versi 11.5; Simulator iOS -> I / O -> Keyboard -> Hubungkan Keyboard Perangkat Keras
miletliyusuf
40

Emulator mencoba menemukan keypad numerik di mac, tetapi tidak ditemukan (MacBook Pro, MacBook Air, dan keyboard "normal / kecil" tidak memilikinya). Anda dapat membatalkan pilihan Connect Hardware Keyboard atau mengabaikan pesan kesalahan, itu tidak akan berpengaruh negatif pada aplikasi.

orang gelap
sumber
16

Pergi saja ke

iOS Simulator -> Hardware -> Keyboard -> Hapus centang pada Connect Hardware Keyboard Option.

Ini akan memperbaiki masalah tersebut.

Keyboard MAC Anda tidak akan berfungsi setelah melakukan langkah di atas, Anda harus menggunakan keyboard simulator.

Avinash651
sumber
12

Saya menggunakan xcode dengan ios 8 cukup hapus centang opsi menghubungkan harware keyboard di Simulator-> Perangkat Keras-> Keyboard-> Hubungkan Keyboard Perangkat Keras.

Ini akan menyelesaikan masalah.

pengguna4600710
sumber
Benar-benar tidak tahu di mana simulator iOS ini. Atau di mana perangkat kerasnya? Anda sedang berbicara tentang simulator yang sebenarnya seperti benda yang terlihat seperti iPhone, dan melalui itu saya menemukan perangkat keras?
Thomas
7

Saya memiliki masalah yang sama di Xcode 8.1 dan iOS 10.1. Apa yang berhasil bagi saya adalah masuk ke Simulator-> Hardware-> Keyboard dan hapus centang Connect Hardware Keyboard.

carlson
sumber
7

Masuk ke Simulator-> Hardware-> Keyboard dan hapus centang Connect Hardware Keyboard.

Sama seperti banyak jawaban di atas TAPI tidak berubah untuk saya sampai saya keluar dan memulai ulang simulator. xcode 8.2.1 dan Simulator 10.0.

tdw
sumber
5

Jalankan aplikasi menggunakan simulator

iOS Simulator-> Hardware-> Keyboard -> iOS menggunakan tata letak yang sama dengan OS X.

Ini akan memperbaiki masalah jika ada orang di luar sana yang menjalankan aplikasi mereka di perangkat mereka

Ronaldoh1
sumber
3

Saya mendapat pesan kesalahan yang sama karena dua alasan terpisah, jadi Anda dapat menambahkannya ke daftar periksa debugging:

Konteks: Xcode 6.4, iOS: 8.4. Saya menambahkan toolbar dengan custom UIBarButtons untuk memuat dengan UIKeyboardTypeNumberPad(Swift :) UIKeyboardType.numberPad, yaitu "Done" dan "+/-". Saya mengalami masalah ini ketika:

  1. UIToolbar saya dideklarasikan sebagai properti, tetapi saya lupa mengalokasikan / memasukkannya secara eksplisit.

  2. Saya telah meninggalkan baris terakhir [myCustomToolbar sizeToFit];, yang terdengar seperti keluarga yang sama dengan jawaban Holden (kode saya di sini: https://stackoverflow.com/a/32016397/4898050 ).

Semoga berhasil

AmitaiB
sumber
2

Di Aplikasi iOS Anda tidak dapat menemukan Keypad Numerik yang terpasang ke OS X Anda. Jadi, Anda hanya perlu Hapus centang opsi Sambungkan Keyboard Perangkat Keras di Simulator Anda, di jalur berikut hanya untuk tujuan pengujian:

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

Ini akan menyelesaikan masalah di atas.

Saya pikir Anda juga harus melihat tautan di bawah ini. Ia mengatakan itu bugdi XCodepada akhir yang Forum pasca benang!

Referensi

Hitesh Surani
sumber
1

Saya mengalami masalah yang sama saat menggunakan profil penyediaan distribusi. Periksa apakah Anda menggunakan profil pengembang

KIO
sumber
1

Mengapa kode panjang dan tidak menggunakan UIToolbar? sejak peringatan masih ada?

UIToolbar berfungsi untuk semua Versi iOS, berikut kode contoh saya

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];
}
NFerocious
sumber
0

Mungkin Anda harus mengatur ulang bingkai tombol, saya juga punya masalah, dan nslog tampilan keyboard seperti ini:

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>>"
Holden
sumber
-1

Oke, inilah perbaikan sederhana untuk menyelesaikan tombol 'selesai' untuk ditampilkan dan berfungsi di aplikasi di iOS 9, iOS 8 dan di bawahnya ketika saya mendapat kesalahan serupa. Itu bisa diamati setelah menjalankan aplikasi dan melihatnya melalui 'View's Hierarchy' (yaitu mengklik ikon 'View Hierarchy' dari bilah Area Debug saat aplikasi berjalan di perangkat dan memeriksa tampilan Anda di Storyboard), bahwa keyboard ditampilkan jendela berbeda di iOS 9 dibandingkan dengan iOS 8 dan versi di bawahnya dan harus diperhitungkan. 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;
    }
}

Dan ini adalah bagaimana Anda bisa menghapusKeyboardButton dari keyboard jika Anda mau.

- (void)removeKeyboardButton {

id windowTemp = [self addButtonToKeyboard];

if (windowTemp) {

    for (UIView *doneButton in [windowTemp subviews]) {
        if ([doneButton isKindOfClass:[UIButton class]]) {
            [doneButton setHidden:TRUE];
        }
    }
  }
}
Vick Swift
sumber