2013-11-21 2 views
3

В моей программе я использую UIWebView с редактируемым div для редактора Rich Text. Мне нужно удалить верхнюю панель клавиатуры. enter image description hereКак удалить верхнюю панель клавиатуры в ios 7

Я использовал ниже код - он удаляет только следующие/предыдущие кнопки Я хочу удалить полный верхний бар.

- (void)removeBar { 
    UIWindow *keyboardWindow = nil; 
    for (UIWindow *testWindow in [[UIApplication sharedApplication] windows]) { 
     if (![[testWindow class] isEqual:[UIWindow class]]) { 
      keyboardWindow = testWindow; 
      break; 
     } 
    } 

    for (UIView *possibleFormView in [keyboardWindow subviews]) { 
     // iOS 5 sticks the UIWebFormView inside a UIPeripheralHostView. 
     if ([[possibleFormView description] rangeOfString:@"UIPeripheralHostView"].location != NSNotFound) { 
      for (UIView *subviewWhichIsPossibleFormView in [possibleFormView subviews]) { 
       if ([[subviewWhichIsPossibleFormView description] rangeOfString:@"UIWebFormAccessory"].location != NSNotFound) { 
        [subviewWhichIsPossibleFormView removeFromSuperview]; 
       } 
      } 
     } 
    } 
} 
+2

Чтобы быть честным, я не уверен, что Apple позволит вам вступить в игру с родной клавиатурой. Это может быть отклонено при его представлении. – Popeye

+0

Это не отображается для textView и textField.i без инструментальной панели клавиатуры – Suravi

+0

В любом случае, с помощью клавиатуры с клавиатурой в любом случае происходит отбраковка, даже если она просто избавляется от панели инструментов в верхней части клавиатуры. Я бы рекомендовал рассмотреть ваш план проектирования, потому что я действительно не думаю, что это разрешено. Сожалею. – Popeye

ответ

3

Я нашел решение для прошивкой 8. Вы можете проверить его здесь: [IOS 8 - Удалить Предыдущий/Следующий/Done UIKeyboard панель инструментов внутри UIWebView] [1]

Вы можете попробовать и улучшить это. попробуйте вызвать эту функцию внутри обработчика событий UIKeyboardDidShowNotification.

Надеется, что это помогает ... Это уровень взглядов в аксессуаре: (UIWebFormAccessory) -> (UIToolbar) -> (UIImageView, UIToolbarButton, UIToolbarButton)

-(void) removeKeyboard { 
UIWindow *keyboardWindow = nil; 
for (UIWindow *testWindow in [[UIApplication sharedApplication] windows]) { 
    if (![[testWindow class] isEqual : [UIWindow class]]) { 
     keyboardWindow = testWindow; 
     break; 
    } 
} 

// Locate UIWebFormView. 
for (UIView *possibleFormView in [keyboardWindow subviews]) { 

    if ([[possibleFormView description] hasPrefix : @"<UIInputSetContainerView"]) { 
     for (UIView* peripheralView in possibleFormView.subviews) { 

      for (UIView* peripheralView_sub in peripheralView.subviews) { 


       // hides the backdrop (iOS 8) 
       if ([[peripheralView_sub description] hasPrefix : @"<UIKBInputBackdropView"] && peripheralView_sub.frame.size.height == 44) { 
        [[peripheralView_sub layer] setOpacity : 0.0]; 

       } 
       // hides the accessory bar 
       if ([[peripheralView_sub description] hasPrefix : @"<UIWebFormAccessory"]) { 


        for (UIView* UIInputViewContent_sub in peripheralView_sub.subviews) { 

         CGRect frame1 = UIInputViewContent_sub.frame; 
         frame1.size.height = 0; 
         peripheralView_sub.frame = frame1; 
         UIInputViewContent_sub.frame = frame1; 
         [[peripheralView_sub layer] setOpacity : 0.0]; 

        } 

        CGRect viewBounds = peripheralView_sub.frame; 
        viewBounds.size.height = 0; 
        peripheralView_sub.frame = viewBounds; 

       } 
      } 

     } 
    } 


} 
} 
0

Из того, что я могу сказать, похоже, что на клавиатуре есть добавленный входной доступ к вершине. В противном случае я не уверен, почему он появляется. В любом случае, если это так, то все, что вы назначаете firstResponder установить их inputAccessoryView к нулю:

someObjectWithFirstResponder.inputAccessoryView = nil; 

EDIT: Похоже UIWebView устанавливает сам inputAccessoryView, но если он действительно получает firstResponder, то вы должны быть в состоянии переопределить inputAccessoryView. Если установить его в ноль вызывает его по умолчанию обратно в inputAccessoryView, что вы пытаетесь удалить, то вы можете попробовать установить его на пустой взгляд:

someObjectWithFirstResponder.inputAccessoryView = [UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)]; 

EDIT Этот метод не работает в прошивкой 8.0 и больше.

+0

Это больше не работает на iOS8. – Dmitry

+0

Вы правы. Я попытался это сделать в Obj-C и Swift, и ни один из них не удаляет его. Я обновил свой первоначальный ответ, указав, что метод не работает в iOS 8. Я обязательно буду обновлять свой ответ, если найду подходящее решение. –

+0

@AronCrittendon Я нашел решение для iOS 8. Вы можете проверить его здесь: http: //cocoainios.blogspot.in/2014/11/ios8-uiwebview-remove-or-modify.html –

0

Существует решение для этого here.

Этот ответ включает функцию, называемую removeKeyboardTopBar, которая должна быть вызвана на UIKeyboardWillShowNotification.

  1. Слушайте уведомления:

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; 
    
  2. В уведомлении, вызовите функцию после задержки. Задержка необходима, чтобы убедиться, что объекты существуют до запуска функции (поскольку мы вызываем это на клавиатуре будет показать, а не клавиатуру сделал показать).

    - (void)keyboardWillShow:(NSNotification*) notification { 
        [self performSelector:@selector(removeKeyboardTopBar) withObject:nil afterDelay:0]; 
    } 
    
Смежные вопросы