Принуждение приложения к использованию Apple Keyboard в iOS 8

Как я могу заставить поля UIText моего приложения использовать только клавиатуру Apple в iOS 8? Я не хочу разрешать сторонние клавиатуры, и точка. Я понимаю, что это может быть плохой пользовательский опыт, поэтому, пожалуйста, не обсуждайте этот момент со мной :)

Я знаю, что могу установить для свойства secureEntry значение true, чтобы принудительно использовать клавиатуру Apple (http://www.imore.com/custom-keyboards-ios-8-explained). Может быть, iOS 8 позволит мне установить это свойство и НЕ маскировать текст?


person barnone    schedule 06.08.2014    source источник


Ответы (3)


Установив свойство UITextView или UITextField Secure Text Entry на YES, пользовательские клавиатуры не будут отображаться по умолчанию, и их также нельзя будет переключать.

Это также, к сожалению, скроет информацию о нажатии клавиш, а также переопределит и отключит автоматические прописные буквы, автокоррекцию и предложения по правописанию. Таким образом, вам нужно переключить обратно на NO после того, как вы закончите принудительно заставлять пользователя использовать клавиатуру Apple.

Включение и отключение этого свойства может привести к тому, что клавиатура Apple будет первой клавишей, отображаемой по умолчанию.


ТЕПЕРЬ пользователь по-прежнему сможет нажимать глобальную клавишу, поэтому у вас есть два варианта:

• Во-первых, вы можете просто позволить им и определить, используют ли они [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(inputModeDidChange:) name:@"UITextInputCurrentInputModeDidChangeNotification" object:nil];, и просто повторно зациклить приведенный выше код secureTextEntry и принудительно переключиться обратно на клавиатуру Apple по умолчанию (непрофессиональный метод, но очень простой в программировании). (*Примечание! Это также не позволит пользователям использовать клавиатуру для диктовки (нажав кнопку со значком микрофона рядом с пробелом), если вы не используете недокументированный код для определения, является ли это диктовкой или нет (который существует и предположительно прошел Проверка Apple для нескольких учетных записей. Информацию об этом можно найти здесь)


Или < br>

• Два: использовать UIWindows, чтобы получить ONTOP клавиатуры по умолчанию, и добавить UIWindow с userInteractionEnabled, установленным на YES, покрывающим, где находится эта клавиша (для этого потребуется несколько условных операторов, чтобы убедиться, что вы охватывая правильную «клавишу смены клавиатуры» для каждой возможности (например, альбомная клавиатура iPhone4, портретная клавиатура iPhone5 и т. д.).

Вот некоторый демонстрационный код, хотя он работает для портретных клавиатур (iphone5 и iphone4)






viewController.h

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UITextFieldDelegate> {

    UITextField *theTextField;
    UIWindow *statusWindow;

}

@end





viewController.m

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.


    theTextField = [[UITextField alloc] initWithFrame:CGRectMake(50, 50, 50, 250)];
    [theTextField becomeFirstResponder];
    theTextField.secureTextEntry = YES;//turn back OFF later (like in `viewDidAppear`) and reset textField properties to YES (like auto correct, auto caps, etc).
    theTextField.delegate = self;
    [self.view addSubview:theTextField];



    //UIWindow *statusWindow; MUST be defined in .h file!
    statusWindow = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    statusWindow.frame = CGRectMake(37, self.view.frame.size.height-47, 45, 45);
    statusWindow.windowLevel = UIWindowLevelStatusBar;
    statusWindow.hidden = NO;
    statusWindow.backgroundColor = [UIColor clearColor];

    UIButton *keyboardCover = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 45, 45)];
    keyboardCover.backgroundColor = [UIColor redColor];
    [statusWindow addSubview:keyboardCover];

    //statusWindow.alpha = 1.00;
    statusWindow.userInteractionEnabled = YES;
    [statusWindow makeKeyAndVisible];


}

-(void)viewDidAppear:(BOOL)animated {
    [theTextField resignFirstResponder];
    theTextField.secureTextEntry = NO;
    theTextField.autocorrectionType = 2;//ON
    theTextField.autocapitalizationType = 2;//ON
    theTextField.spellCheckingType = 2;//ON
    [theTextField becomeFirstResponder];
}



- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end












Вот пример того, как будет выглядеть этот код... Я использовал пользовательскую клавиатуру, когда я запускал приложение, оно заставило меня на клавиатуру Apple, затем поместил красный квадрат над кнопкой «сменить клавиатуру», из-за чего я не мог нажать кнопку, чтобы сменить клавиатуру. (красный квадрат можно изменить на что угодно, например, на пустую клавишу или значок земного шара в блеклом (отключенном) состоянии.)



введите здесь описание изображения

person Albert Renshaw    schedule 10.08.2014
comment
Спасибо за ответ. Моя команда решила просто использовать пользовательские клавиатуры и довериться безопасности Apple. - person barnone; 20.08.2014
comment
Удачи тебе! :) - person Albert Renshaw; 20.08.2014

Apple предоставляет API именно для этого. Поместите это в свой AppDelegate

- (BOOL)application:(UIApplication *)application
shouldAllowExtensionPointIdentifier:(NSString *)extensionPointIdentifier
{
    if ([extensionPointIdentifier isEqualToString:@"com.apple.keyboard-service"]) {
        return NO;
    }
    return YES;
}

Это самый чистый и документированный способ сделать это :)

person Joe Tam    schedule 17.09.2014
comment
Я пытался, но даже он возвращает НЕТ, сторонняя клавиатура все еще показывает. - person DianeZhou; 07.05.2016
comment
Вероятно, вы не поместили это в свой AppDelegate.m. - person Will Von Ullrich; 15.05.2018

Насколько мне известно, нет никакого способа сделать это. Однако, если вы готовы приложить усилия, вы можете создать собственное пользовательское представление ввода, имитирующее стандартную клавиатуру Apple, и использовать его вместо этого. Дополнительные сведения о представлениях ввода см. в документации< /а>.

person Kamaros    schedule 06.08.2014
comment
Спасибо за ваш ответ. Если никто не предложит способ добиться этого, я отмечу ваш ответ как принятый. - person barnone; 07.08.2014
comment
@barnone Проделал очень творческую работу, чтобы решить вашу проблему ... Мне потребовалось несколько часов, чтобы придумать, поэтому, пожалуйста, проверьте это :) Я даже разместил весь демо-код, который вам понадобится! - person Albert Renshaw; 10.08.2014