Cocos2d 自动获取短信验证码-IOS篇

IOS 12以后增加了键盘自动识别验证码的功能;但是在cocos2dx-3.17 中并没有实现这一功能;所以需要对EidtBox修改,增加开启自动获取短信验证码的设置;

在EditBox中,真正与各个平台进行交互的对象是

  EditBoxImpl*      _editBoxImpl;

在EditBoxImpl中是一系列的纯虚函数。

而EditBoxImplCommon则继承于EditBoxImpl;并对EditBoxImpl中的纯虚函数进行了重写。在重写函数中,保存相应的设置参数,并调用设置原生平台参数的函数。在EditBoxImplCommon中,对一系列原生平台的参数设置函数也都是纯虚函数,由各个原生平台类分别实现函数内容。

基于以上结构逻辑,我们需要在IOS平台上设置开启短信识别功能的话,则需要:

EditBoxImpl 中添加纯虚函数:virtual void setTextContentTypeOneTimeCode() = 0;

在EditBoxImplCommon 中实现:

virtual void setTextContentTypeOneTimeCode() override;

void EditBoxImplCommon::setTextContentTypeOneTimeCode()

{

    this->setNativeTextContentTypeOneTimeCode();

}

并添加设置原生平台的对应纯虚函数:

virtual void setNativeTextContentTypeOneTimeCode() = 0;

接下来就是在各个平台实现以上纯虚函数;由于此功能只会在IOS平台上使用,所以在其他平台只需要实现空函数即可

virtual void setNativeTextContentTypeOneTimeCode() override{};

而在IOS平台中,实现如下:

void EditBoxImplIOS::setNativeTextContentTypeOneTimeCode()

{

    [_systemControl setTextContentTypeOneTimeCode];

}

在UIEditBoxImplIOS_objc定义- (void)setTextContentTypeOneTimeCode;

并实现

- (void)setTextContentTypeOneTimeCode

{

    if (@available(iOS 12.0, *)) {

        self.textInput.textContentType = UITextContentTypeOneTimeCode;

    } else {

        // Fallback on earlier versions

    }

}

由于此功能只是在IOS12以上版本版本才添加的,所以需要在函数中判断系统是否是12以上。

注:在EditBox为非空或非选中状态下,不会在键盘上显示获得验证码,所以在接受到验证码时需把EditBox设置为第一响应对象,并清空内容。

 

 

 

你可能感兴趣的:(Cocos2d 自动获取短信验证码-IOS篇)