項(xiàng)目里有接入通聯(lián)支付,遇到一bug:進(jìn)入快捷簽約界面后,無論點(diǎn)哪里輸入都彈出一個(gè)選擇證件類型框,沒法輸入.
0CD6AC00D8FC4F94200DAB4AB0D13819.png
在更換了最新的通聯(lián)SDK2.5.2,檢查訂單數(shù)據(jù)的正確性,跑他們DEMO.發(fā)現(xiàn)在DEMO上是正常的,但接入我們的工程里就出現(xiàn)了上述問題.
看了通聯(lián)的界面上彈出的鍵盤上的東西,和IQKeyboardManager的風(fēng)格很相似.
96C78955-A0C4-4C10-8779-812F7211D2EF.png
而我們的項(xiàng)目里面有使用了IQKeyboardManager第三方庫,于是便把我們工程里的IQKeyboardManager第三方庫去掉后,問題 (快捷簽約界面,無論點(diǎn)哪里輸入都彈出一個(gè)選擇證件類型框,沒法輸入)就沒有了.我覺得有可能通聯(lián)的SDK里有使用了類似的鍵盤第三方庫,導(dǎo)致了這個(gè)bug.
因此如果項(xiàng)目里面已經(jīng)集成了IQKeyboardManager第三方庫,但又要集成通聯(lián)支付,那么慎重!!!
目前想到的暫時(shí)的解決辦法就是改IQKeyboardManager源代碼:
在進(jìn)入到通聯(lián)支付界面之前,先enable=NO,完事在=YES.
- (void)registerNotify
{
// Registering for keyboard notification.
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:UIKeyboardDidHideNotification object:nil];
// Registering for textField notification.
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldViewDidBeginEditing:) name:UITextFieldTextDidBeginEditingNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldViewDidEndEditing:) name:UITextFieldTextDidEndEditingNotification object:nil];
// Registering for textView notification.
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldViewDidBeginEditing:) name:UITextViewTextDidBeginEditingNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldViewDidEndEditing:) name:UITextViewTextDidEndEditingNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldViewDidChange:) name:UITextViewTextDidChangeNotification object:nil];
// Registering for orientation changes notification
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willChangeStatusBarOrientation:) name:UIApplicationWillChangeStatusBarOrientationNotification object:nil];
}
- (void)resignNotify
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
/* Automatically called from the `+(void)load` method. */
+ (instancetype)sharedManager
{
//Singleton instance
static IQKeyboardManager *kbManager;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
kbManager = [[self alloc] init];
});
return kbManager;
}
#pragma mark - Dealloc
-(void)dealloc
{
// Disable the keyboard manager.
[self setEnable:NO];
//Removing notification observers on dealloc.
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
#pragma mark - Property functions
-(void)setEnable:(BOOL)enable
{
// If not enabled, enable it.
if (enable == YES && _enable == NO)
{
//Setting NO to _enable.
_enable = enable;
[self registerNotify];
//If keyboard is currently showing. Sending a fake notification for keyboardWillShow to adjust view according to keyboard.
if (_kbShowNotification) [self keyboardWillShow:_kbShowNotification];
_IQShowLog(IQLocalizedString(@"enabled", nil));
}
//If not disable, desable it.
else if (enable == NO && _enable == YES)
{
//Sending a fake notification for keyboardWillHide to retain view's original frame.
[self keyboardWillHide:nil];
//Setting NO to _enable.
_enable = enable;
[self resignNotify];
_IQShowLog(IQLocalizedString(@"disabled", nil));
}
//If already disabled.
else if (enable == NO && _enable == NO)
{
_IQShowLog(IQLocalizedString(@"already disabled", nil));
}
//If already enabled.
else if (enable == YES && _enable == YES)
{
_IQShowLog(IQLocalizedString(@"already enabled", nil));
}
}