2013-11-21 65 views
3

在我的程序中,我使用UIWebView與富文本編輯器的可編輯div。我需要刪除鍵盤的頂部欄。 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

說實話我不知道蘋果會允許你像這樣去掉原生鍵盤。提交時可能會被拒絕。 – Popeye

+0

這不會出現textView和textField.i需要沒有鍵盤的工具欄 – Suravi

+0

無論如何,與鍵盤混淆有拒絕寫滿了它,即使它只是擺脫鍵盤頂部的工具欄。我會建議審查你的設計計劃,因爲我真的不認爲這是允許的。抱歉。 – Popeye

回答

3

我發現的iOS 8.解決方法您可以點擊此處查看:iOS的8 - 刪除上一頁/下一頁/完成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

從我可以告訴,它看起來像鍵盤有添加inputAccessoryView到它的頂部。否則,我不確定它爲什麼出現。不管怎麼說,如果是那麼無論你分配firstResponder他們inputAccessoryView設置爲零的情況下:

someObjectWithFirstResponder.inputAccessoryView = nil; 

編輯:看起來像一個UIWebView設置inputAccessoryView本身,但如果實際接收firstResponder,那麼你應該能夠重寫inputAccessoryView。如果設置爲nil,使其默認回到你正在試圖刪除inputAccessoryView,那麼你可以嘗試將其設置爲空的觀點:

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

編輯此方法不會在IOS 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]; 
    }