Ответ 1
Все знаки указывают на это не представляется возможным, включая несколько вопросы здесь.
Можно ли удалить помощника формы с всплывающей клавиатуры iPhone в автономном веб-приложении? Я знаю, что общий консенсус заключается в том, что это невозможно в Mobile Safari, но автономное приложение работает в UIWebView
и функционирует по-разному несколькими способами (example), поэтому я надеюсь, что это возможно.
Вы можете увидеть это прямо над клавиатурой:
Кнопки Previous и Next переключаются между входами <form>
. Но у меня есть единственный элемент <input>
, поэтому они отключены. Кнопка "Готово" скрывает клавиатуру, но поскольку у меня есть гибкая высота <ul>
(которая занимает пространство между клавиатурой и <input>
), и я больше ничего не вижу на этой странице, это нецелесообразно.
На крошечном экране и почти на половину экрана, занимаемом клавиатурой, 44 пикселя, составляющих эту панель инструментов, представляют собой огромную трату пространства (всего <li>
).
Нативные приложения iOS могут удалить его, поэтому я знаю, что это возможно по телефону, я просто не нашел способ сделать это в веб-приложении. Это из приложения Facebook, и страница очень похожа на мою:
Я попытался использовать <input>
, не завернутый в <form>
, а также используя contenteditable
<div>
, но результаты были одинаковыми. Существует несколько пользовательских стилей -webkit-
для управления различными аспектами интерфейса веб-приложения, но они плохо документированы, и поиск не стал на этом ничего.
Любой способ удалить помощника формы в веб-приложении?
Все знаки указывают на это не представляется возможным, включая несколько вопросы здесь.
Если приложение представляет собой веб-приложение, завернутое в приложение Objetive-C, это можно сделать, манипулируя представлениями клавиатуры.
сначала зарегистрируйтесь, чтобы получить уведомление keyboardDidShow:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil];
это вызовет следующий метод при появлении клавиатуры:
-(void)keyboardDidShow:(NSNotification*)notif
{
NSArray *array = [[UIApplication sharedApplication] windows];
for (UIWindow* wind in array) {
for (UIView* currView in wind.subviews) {
if ([[currView description] hasPrefix:@"<UIPeripheralHostView"]) {
for (UIView* perView in currView.subviews) {
if ([[perView description] hasPrefix:@"<UIWebFormAccessory"]) {
[perView setHidden:YES];
}
}
}
}
}
}
этот метод просматривает просмотры на экране, ища помощника формы и скрывая его.
ПРИМЕЧАНИЕ. Apple, вероятно, не откажется от этого, так как я видел, что он используется Facebook и т.д., но этот метод может нарушить предстоящие выпуски iOS.
Вы можете сделать категорию UIView и "переопределить" поведение addSubview: как в примере ниже. Вызовите метод "exachangeMethods" из вашего приложенияDidFinishLaunching вашего AppDelegate.
#import "UIView+util.h"
#import <objc/runtime.h>
@implementation UIView (util)
// Swaps our custom implementation with the default one
// +load is called when a class is loaded into the system
+ (void) exchangeMethods
{
SEL origSel = @selector(addSubview:);
SEL newSel = @selector(customAddSubview:);
Class viewClass = [UIView class];
Method origMethod = class_getInstanceMethod(viewClass, origSel);
Method newMethod = class_getInstanceMethod(viewClass, newSel);
method_exchangeImplementations(origMethod, newMethod);
}
- (void) customAddSubview:(UIView *)view{
if( [[view description]rangeOfString:@"<UIWebFormAccessory"].location!=NSNotFound) {
return;
}
// This line at runtime does not go into an infinite loop
// because it will call the real method instead of ours.
return [self customAddSubview:view];
}
@end