Không thể tìm thấy bàn phím hỗ trợ loại 4 cho bàn phím iPhone-Portrait-NumberPad; sử dụng 3876877096_Portrait_iPhone-Simple-Pad_Default


114

Tôi đã tải xuống iOS 8 Gold Master cho iPhone và SDK.

Tôi đã thử nghiệm ứng dụng và nó hoạt động tốt, ngoại trừ một điều.

Tôi có một trường văn bản nơi bàn phím số sẽ xuất hiện nếu người dùng muốn nhập nội dung nào đó, ngoài ra, một nút tùy chỉnh được thêm vào vùng trống khi bàn phím hiển thị.

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

}

Điều này đã hoạt động tốt cho đến bây giờ.

Trước hết, tôi nhận được cảnh báo này:

Không thể tìm thấy bàn phím hỗ trợ loại 4 cho bàn phím iPhone-Portrait-NumberPad; sử dụng 3876877096_Portrait_iPhone-Simple-Pad_Default

thì nút tùy chỉnh đó cũng không hiển thị, tôi nghĩ là do 2 dòng này:

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

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

Bất kỳ đề xuất?

Câu trả lời:


10

Tôi cũng đã gặp vấn đề này và đã tìm ra giải pháp.

Dưới đây là mã sẽ hoạt động cho iOS 8.0 và cả các phiên bản bên dưới.

Tôi đã thử nghiệm nó trên iOS 7 và 8.0 (Phiên bản 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;
    }
}

Hi vọng điêu nay co ich.

Nhưng, tôi vẫn nhận được cảnh báo này:

Không thể tìm thấy bàn phím hỗ trợ loại 4 cho bàn phím iPhone-Portrait-NumberPad; sử dụng 3876877096_Portrait_iPhone-Simple-Pad_Default

Bỏ qua cảnh báo này, tôi đã làm cho nó hoạt động. Vui lòng cho tôi biết nếu bạn có thể giảm bớt cảnh báo này.


Làm việc rất tốt cho tôi. Cảm ơn bạn đời.
CRAZYSNAKE

Đối với addDoneButton hoặc removeDoneButton: stackoverflow.com/questions/26031798/… Tôi chạy mã trên trong XCode-5.1.1 trong thiết bị iOS-6/7/8. Hoạt động hoàn hảo.
alishaik786

1
- (void) doneButton: (UIButton *) người gửi {NSLog (@ "fdsfdsdsf"); }
SampathKumar

Tôi đã thực hiện tất cả các thao tác này nhưng nút thực hiện không thể nhấp được, bạn có thể ghép cho tôi được không?
SergStav

Với bản phát hành mới nhất của iOS 8.3 trở lên, một số thứ đã thay đổi làm lỗi mã đã đăng trước đó. Tôi đã thêm kiểm tra cho iOS 8.3 trở lên, Nó có thể ngừng hoạt động đối với phiên bản iOS trong tương lai. Vui lòng kiểm tra ở trên.
iGW

143

Tôi cũng gặp sự cố này sau khi cập nhật lên Xcode Beta mới nhất. Cài đặt trên trình mô phỏng được làm mới, vì vậy bàn phím máy tính xách tay (bên ngoài) đang được phát hiện. Nếu bạn chỉ cần nhấn:

Trình mô phỏng iOS -> Phần cứng -> Bàn phím -> Kết nối Bàn phím Phần cứng

để mục nhập không được kiểm tra thì bàn phím phần mềm sẽ được hiển thị một lần nữa.


14
Tôi có thể nhấn Shift + Cmd + K do nhầm lẫn!
Eric

1
iOS Simulator -> Hardware -> Keyboard -> Connect Phần cứng Bàn phím bỏ chọn nó và nó giải quyết
EFE

Thao tác này chỉ bỏ qua kiểm tra phát ra lỗi khi bạn đang sử dụng trình mô phỏng - lỗi và hoán đổi bàn phím sẽ vẫn xảy ra trong thế giới thực trên các thiết bị thực.
Zack

Nếu cách này không hiệu quả, hãy chọn Trình mô phỏng -> Phần cứng -> Xóa tất cả nội dung và cài đặt.
Wimukthi Rajapaksha

1
Đối với Phiên bản 11.5; Trình mô phỏng iOS -> I / O -> Bàn phím -> Kết nối bàn phím phần cứng
miletliyusuf

40

Trình giả lập cố gắng tìm bàn phím số trên mac nhưng không tìm thấy bàn phím này (MacBook Pro, MacBook Air và bàn phím "bình thường / nhỏ" không có). Bạn có thể bỏ chọn tùy chọn Connect Hardware Keyboard hoặc chỉ cần bỏ qua thông báo lỗi, nó sẽ không có ảnh hưởng xấu đến ứng dụng.


16

Chỉ cần đi đến

Trình mô phỏng iOS -> Phần cứng -> Bàn phím -> Bỏ chọn Tùy chọn Bàn phím Kết nối Phần cứng.

Điều này sẽ khắc phục sự cố.

Bàn phím MAC của bạn sẽ không hoạt động sau khi thực hiện bước trên, Bạn phải sử dụng bàn phím giả lập.


12

Tôi đang sử dụng xcode với ios 8 chỉ cần bỏ chọn tùy chọn kết nối bàn phím harware trong Trình mô phỏng của bạn-> Phần cứng-> Bàn phím-> Kết nối Bàn phím Phần cứng.

Điều này sẽ giải quyết vấn đề.


Theo nghĩa đen, không biết trình mô phỏng iOS này ở đâu. Hay phần cứng ở đâu? Bạn đang nói về trình mô phỏng thực tế giống như một thứ trông giống như một chiếc iPhone, và thông qua đó tôi tìm thấy phần cứng?
Thomas

7

Tôi đã gặp vấn đề tương tự trong Xcode 8.1 và iOS 10.1. Những gì hiệu quả với tôi là đi vào Simulator-> Hardware-> Keyboard và bỏ chọn Connect Hardware Keyboard.


7

Vào Simulator-> Hardware-> Keyboard và bỏ chọn Connect Hardware Keyboard.

Giống như nhiều câu trả lời ở trên NHƯNG không thay đổi đối với tôi cho đến khi tôi thoát và khởi động lại trình mô phỏng. xcode 8.2.1 và Simulator 10.0.


5

Chạy ứng dụng bằng trình mô phỏng

Trình mô phỏng iOS-> Phần cứng-> Bàn phím -> iOS sử dụng bố cục giống như OS X

Điều này sẽ khắc phục sự cố nếu có ai đó đang chạy ứng dụng của họ trên thiết bị của họ


3

Tôi nhận được cùng một thông báo lỗi vì hai lý do riêng biệt, vì vậy bạn có thể thêm chúng vào danh sách kiểm tra gỡ lỗi của mình:

Bối cảnh: Xcode 6.4, iOS: 8.4. Tôi đã thêm một thanh công cụ với các tùy chỉnh UIBarButtonđể tải bằng UIKeyboardTypeNumberPad(Swift UIKeyboardType.numberPad:), cụ thể là "Xong" và "+/-". Tôi gặp sự cố này khi:

  1. Thanh UIToolbar của tôi được khai báo là một thuộc tính, nhưng tôi đã quên cấp phát / init nó một cách rõ ràng.

  2. Tôi đã bỏ qua dòng cuối cùng [myCustomToolbar sizeToFit];, có vẻ như nó cùng họ với câu trả lời của Holden (mã của tôi ở đây: https://stackoverflow.com/a/32016397/4898050 ).

Chúc may mắn


2

Trong Ứng dụng iOS của bạn, không thể tìm thấy Bàn phím số được đính kèm với OS X. Vì vậy, bạn chỉ cần Bỏ chọn tùy chọn Bàn phím phần cứng kết nối trong Trình mô phỏng của mình, theo đường dẫn sau chỉ dành cho mục đích thử nghiệm:

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

Điều này sẽ giải quyết vấn đề trên.

Tôi nghĩ bạn cũng nên xem liên kết dưới đây. Nó nói rằng nó là một bugXCodecuối chuỗi bài đăng trên Diễn đàn đó!

Tài liệu tham khảo


1

Tôi đã gặp vấn đề tương tự khi sử dụng hồ sơ cấp phép phân phối. Kiểm tra xem bạn có sử dụng hồ sơ nhà phát triển không


1

Tại sao mã dài và không sử dụng UIToolbar? vì cảnh báo vẫn còn tồn tại?

UIToolbar đang hoạt động cho mọi Phiên bản iOS, đây là mã mẫu của tôi

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

Có lẽ bạn nên đặt lại khung của nút, tôi cũng gặp một số vấn đề và nslog chế độ xem bàn phím như thế này:

ios8:

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

trước 8:

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

-1

Được rồi, đây là một bản sửa lỗi đơn giản để nút 'hoàn thành' hiển thị và hoạt động trong một ứng dụng ở cả iOS 9, iOS 8 trở xuống khi tôi gặp lỗi tương tự. Nó có thể được quan sát sau khi chạy một ứng dụng và xem nó qua 'Chế độ xem của Chế độ xem' (tức là nhấp vào biểu tượng 'Chế độ xem' từ thanh Khu vực gỡ lỗi trong khi ứng dụng đang chạy trên thiết bị và kiểm tra chế độ xem của bạn trong Bảng phân cảnh), bàn phím được hiển thị trên cửa sổ khác nhau trong iOS 9 so với phiên bản iOS 8 trở xuống và phải được tính đến. 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;
    }
}

Và đây là cách bạn có thể xóaKeyboardButton khỏi bàn phím nếu muốn.

- (void)removeKeyboardButton {

id windowTemp = [self addButtonToKeyboard];

if (windowTemp) {

    for (UIView *doneButton in [windowTemp subviews]) {
        if ([doneButton isKindOfClass:[UIButton class]]) {
            [doneButton setHidden:TRUE];
        }
    }
  }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.