Подтвердить что ты не робот

Phonegap iOS6: Правильное решение для удаления панели помощника формы (prev, next, done)

Еще одна "как удалить кнопку pre, next, done" - вы можете подумать. На самом деле это не так. Я провел довольно тщательные исследования по этому вопросу и опробовал разные подходы, но ни один метод или решение действительно не делает это правильно. Все обходные пути (то, что они есть), упомянутые и показанные ниже, в основном похожи на один и тот же подход, заменить содержимое файла MainViewController.m. Я хорошо знаю, что более или менее все эти предлагаемые решения несколько hacky, но все же должно быть кто-то там, кто решил эту проблему с немного изяществом и глубокой мыслью или кто-то, кто хорошо знает C и может предложить более прочное решение.

Позвольте мне проиллюстрировать мою точку зрения, сделав ссылки на некоторые предлагаемые решения:

Решение 1

В iOS6 это приводит к тому, что граница формы помощника еще присутствует, а клавиатура действует так, как будто панель помощника формы все еще существует.

Решение 2

Кто-то предложил решение выше, но я просто не могу заставить его работать. Ответчик сделал несколько исправлений и комментариев к сообщению, которые только затрудняют понимание того, что делать. Я пробовал все варианты его решения, но я всегда получаю критическую ошибку , а проект просто не компилируется.

Решение 3

Не программист на C (почему я использую телефонную развязку), поэтому не могу заставить это работать правильно. Не знаю , что добавить где.

Решение 4

Не знаю, где и как это реализовать, поэтому не пробовал. Где я должен зарегистрироваться для получения уведомления keyboardDidShow? Где я должен добавить функцию?

Заключение

Согласно моим исследованиям, если хотите, никто еще не предложил правильное решение этого. Так кто-нибудь успешно удалил помощника формы без каких-либо из вышеупомянутых побочных эффектов?

4b9b3361

Ответ 1

Здесь вы идете, я использую это в приложении, которое я сейчас разрабатываю. Пальцы перешли, что попадают в магазин приложений, хотя и идут на другие "хаки", которые попадают в магазин, это не хуже других, поэтому стоит стоять справедливо.

Никаких раздражающих побочных эффектов с помощью этого метода - он чисто удаляет планку, убедившись, что она никогда не создавалась в первую очередь. Ta da!

Кредит идет https://gist.github.com/2048571, это его код с небольшим исправлением.

#import <objc/runtime.h>
#import <UIKit/UIKit.h>

@interface UIWebView (HackishAccessoryHiding)
@property (nonatomic, assign) BOOL hackishlyHidesInputAccessoryView;
@end

@implementation UIWebView (HackishAccessoryHiding)

static const char * const hackishFixClassName = "UIWebBrowserViewMinusAccessoryView";
static Class hackishFixClass = Nil;

- (UIView *)hackishlyFoundBrowserView {
    UIScrollView *scrollView = self.scrollView;

    UIView *browserView = nil;
    for (UIView *subview in scrollView.subviews) {
        if ([NSStringFromClass([subview class]) hasPrefix:@"UIWebBrowserView"]) {
            browserView = subview;
            break;
        }
    }
    return browserView;
}

- (id)methodReturningNil {
    return nil;
}

- (void)ensureHackishSubclassExistsOfBrowserViewClass:(Class)browserViewClass {
    if (!hackishFixClass) {
        Class newClass = objc_allocateClassPair(browserViewClass, hackishFixClassName, 0);
        IMP nilImp = [self methodForSelector:@selector(methodReturningNil)];
        class_addMethod(newClass, @selector(inputAccessoryView), nilImp, "@@:");
        objc_registerClassPair(newClass);

        hackishFixClass = newClass;
    }
}

- (BOOL) hackishlyHidesInputAccessoryView {
    UIView *browserView = [self hackishlyFoundBrowserView];
    return [browserView class] == hackishFixClass;
}

- (void) setHackishlyHidesInputAccessoryView:(BOOL)value {
    UIView *browserView = [self hackishlyFoundBrowserView];
    if (browserView == nil) {
        return;
    }
    [self ensureHackishSubclassExistsOfBrowserViewClass:[browserView class]];

    if (value) {
        object_setClass(browserView, hackishFixClass);
    }
    else {
        Class normalClass = objc_getClass("UIWebBrowserView");
        object_setClass(browserView, normalClass);
    }
    [browserView reloadInputViews];
}

@end

Ответ 2

Для тех, кто все еще борется с этим, у Phonegap теперь есть два свойства для отключения проблемы с аксессуарами формы и проблема прокрутки страницы, когда поля ввода и текстовой области запускают клавиатуру.

Просто установите в вашем файле config.xml следующее:

<preference name="HideKeyboardFormAccessoryBar" value="true" />
<preference name="KeyboardShrinksView" value="true" />

Ссылка на Документацию по телефону

Ответ 3

Нет общедоступного (так, с помощью App Store) способа отключить панель помощника формы для веб-представлений для UIWebView (какой AFAIK использует то, что использует PhoneGap), элементы формы в любой версии iOS.

Ответ 4

Это похоже на плагин cordova, которого мы все ждали... https://github.com/don/KeyboardToolbarRemover

Это позволяет использовать простые toolbar.hide() и toolbar.show()

Ответ 5

Если вы используете CLG phonegap/cordova 3, вам теперь требуется плагин для удаления панели инструментов. Установите его через терминал.

$ cordova plugin add org.apache.cordova.keyboard 

и используйте это в своем javascript

Keyboard.hideFormAccessoryBar(true);

Но... это не идеально. Во-первых, если вы собираетесь использовать input.focus(), чтобы открыть клавиатуру, панель инструментов показывается ненадолго, прежде чем скрываться. С этого момента все прекрасно. Если вы позволите пользователю щелкнуть непосредственно в поле ввода, это будет нормально.

Тогда в верхней части экрана может быть движение, которое можно решить с помощью этого ответа. Как исправить проблемы с клавиатурой с помощью Cordova 3.1 на iOS?

Трудно получить право, поэтому я бы спросил, действительно ли вам нужно скрыть это, или вы можете сделать его полезным для пользователя?

Ответ 6

Это сработало для меня: https://github.com/don/KeyboardToolbarRemover

Вам нужно будет знать, что нет файла Cordova.plist по Phonegap 2.3.0 - вместо этого отредактируйте свой файл конфигурации config со следующим:

<plugin name="KeyboardToolbarRemover" value="KeyboardToolbarRemover" />

в ветке