jquery – Phonegap iOS6:正确的解决方案去除表单助理栏(上一个,下一个,完成)

另一个“如何去除前,下一步,完成按钮” – 你可能会想到的.不是真的我做了一些相当深入的研究,尝试了不同的方法,但没有方法或解决方案似乎是正确的.下面提到和显示的所有解决方法(这就是它们)是基本相同的方法,替换MainViewController.m文件的内容.我很清楚,这些提出的解决方案或多或少是有点黑客,但仍然有一些人在那里解决了这个问题,有一点恩典和深思,或者有人知道C好,可以提出一个更坚实的解决方案.

请允许我参考一些提出的解决方案来说明我的观点:

Solution 1

在iOS6中,这导致窗体助手栏边框仍然存在,键盘就像表单助手栏还在那里.

Solution 2

有人提出了上述的解决方案,但我根本无法让它工作.回答者对这个帖子做了几次编辑和评论,只是更加难以理解在哪里做.我已经尝试了他的解决方案的所有变体,但我总是最终得到一个关键的错误,该项目根本不会编译.

Solution 3

不是一个C程序员(这就是为什么我使用phonegap)所以不能让它正常工作.不知道添加哪里.

Solution 4

不知道在哪里和如何实现,所以没有尝试过.我应该在哪里注册接收keyboardDidShow通知?我应该在哪里添加功能?

结论

根据我的研究,如果你愿意,没有人提出正确的解决方案.所以有没有成功地删除表单助理没有任何上述的副作用?

最佳答案
在这里,我正在使用我正在开发的应用程序.手指越过它到达应用程序商店,虽然去其他“黑客”,使它到商店,这不比其他人更糟糕,所以应该有一个公平的机会.

这种方法没有烦人的副作用 – 它通过确保它从来没有创建在第一位,干净地删除吧.大达!

信用到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

转载注明原文:jquery – Phonegap iOS6:正确的解决方案去除表单助理栏(上一个,下一个,完成) - 代码日志