Como desabilitar métodos de entrada de terceiros no desenvolvimento do iOS

Atualmente, o iOS permite o uso de métodos de entrada de terceiros, mas no desenvolvimento real, é necessário desabilitar métodos de entrada de terceiros, seja por motivos de segurança ou para restringir métodos de entrada para um controle de entrada. Com base nisso, faça um resumo das maneiras de desabilitar métodos de entrada de terceiros.

1. Desativar globalmente

Versão da linguagem Objective-C:

- (BOOL)application:(UIApplication *)application
  shouldAllowExtensionPointIdentifier:(UIApplicationExtensionPointIdentifier)extensionPointIdentifier
{
  // 禁用三方输入法
  // UIApplicationKeyboardExtensionPointIdentifier 等价于 @"com.apple.keyboard-service"
  if ([extensionPointIdentifier isEqualToString:UIApplicationKeyboardExtensionPointIdentifier]) {
    return NO;
  }
  return YES;
}

Versão do idioma Swift:

func application(
  _ application: UIApplication,
  shouldAllowExtensionPointIdentifier extensionPointIdentifier: UIApplication.ExtensionPointIdentifier
) -> Bool {
  // 禁用三方输入法
  if extensionPointIdentifier == .keyboard {
    return false
  }
  return true
}

2. Desativar para visualização

func application(
  _ application: UIApplication, 
  shouldAllowExtensionPointIdentifier extensionPointIdentifier: UIApplication.ExtensionPointIdentifier
) -> Bool {
  // 遍历当前根控制器的所有子控制器,找到需要的子控制器
  for vc in self.window?.rootViewController?.childViewControllers ?? []
      where vc.isKind(of: BaseNavigationController.self)
  {
    // 如果首页禁止使用第三方输入法
    for vc1 in vc.childViewControllers where vc1.isKind(of: HomeViewController.self) {
      return false
    }
  }
  return true
}

3. Desativar para um inputView

3.1 Personalize o teclado

Se o requisito for apenas para entrada de número, use primeiro um teclado personalizado, vincule o inputView a um teclado personalizado e nenhum método de entrada de terceiros aparecerá.

3.2 Percorra os controles na exibição, encontre o inputView que precisa ser definido e defina-o especialmente

func application(
  _ application: UIApplication, 
  shouldAllowExtensionPointIdentifier extensionPointIdentifier: UIApplication.ExtensionPointIdentifier
) -> Bool {
  // 遍历当前根控制器的所有子控制器,找到需要的子控制器
  for vc in self.window?.rootViewController?.childViewControllers ?? []
      where vc.isKind(of: BaseNavigationController.self)
  {
    // 如果想要禁用的 inputView 在首页上
    for vc1 in vc.childViewControllers where vc1.isKind(of: HomeViewController.self) {
      // 如果 inputView.tag == 6 的 inputView 禁止使用第三方输入法
      for view in vc1.view.subviews where view.tag == 6 {
        return false
      }
    }
  }
  return true
}

Guess you like

Origin juejin.im/post/7239715562834083897