Cómo deshabilitar los métodos de entrada de terceros en el desarrollo de iOS

iOS actualmente permite el uso de métodos de entrada de terceros, pero en el desarrollo real, existe la necesidad de deshabilitar los métodos de entrada de terceros, ya sea por razones de seguridad o para restringir los métodos de entrada para un control de entrada. En base a esto, haga un resumen de las formas de deshabilitar los métodos de entrada de terceros.

1. Deshabilitar globalmente

Versión del lenguaje Objective-C:

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

Versión en lenguaje Swift:

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

2. Deshabilitar para una vista

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. Deshabilitar para una vista de entrada

3.1 Personaliza el teclado

Si el requisito es solo para la entrada de números, use primero un teclado personalizado, vincule inputView a un teclado personalizado y no aparecerá ningún método de entrada de terceros.

3.2 Atraviese los controles en la vista, encuentre la vista de entrada que debe configurarse y configúrela 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
}

Supongo que te gusta

Origin juejin.im/post/7239715562834083897
Recomendado
Clasificación