亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

點擊UITextFiled鍵盤不出現(支付寶快捷登錄)

發布時間:2020-06-08 07:06:32 來源:網絡 閱讀:1168 作者:fly286065923 欄目:移動開發

 最近在做支付寶快捷支付和快捷登錄,如果手機端裝有“支付寶錢包”這個很正常,但是在手機端沒有裝支付寶錢包時按照支付寶提供文檔應該會出現H5頁面(網頁版)進行操作,但是會遇到調用API:

//schemeinfo.plist注冊的URL Scheme保持一致

    [[AlipaySDK defaultServiceauth_V2WithInfo:signString

                                     fromScheme:@"Bao"

                                       callback:^(NSDictionary *resultDic) {

                                           NSLog(@"result = %@",resultDic);

                                           //授權成功后ResultStatus9000AuthCode會在result中,需對其做解析

                                           NSString *resultStr = resultDic[@"result"];

                                           if (resultStr&&resultStr.length>0) {

                                               NSArray *resultArr = [resultStr componentsSeparatedByString:@"&"];

                                               for (NSString *subResult in resultArr) {

                                                   NSArray *subResultArr = [subResult componentsSeparatedByString:@"="];

                                                   if ([subResultArr[0] isEqualToString:@"auth_code"]) {

                                                       NSLog(@"authCode = %@",subResultArr[1]);

                                                       _strAuthCode = [NSString stringWithFormat:@"%@",subResultArr[1]];

                                                   }

                                               }

                                           }

                                       }];


發現H5頁面一直不會出現,剛開始一直以為這種情況是動畫沖突,或者是下載的別的第三方庫的沖突,就一個一個來排查,發現并不是這個問題,用xcode-new-project 新建一個工程,將支付寶demo中相關信息導入就可以,最后發現區別是 自己項目是用代碼來創建 UIWindow ,

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    [self.window makeKeyAndVisible];


}

而新建project /支付寶demo 是用storyboard 來創建window,

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    return yes;

}

支付寶技術支持建議在調用API前 用代碼:

  UIWindow *firstWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:0];

  firstWindow.hidden = NO;


獲取到project中windows 列表最底層的window 將其可見,然后在回調成功后再隱藏,

callback:^(NSDictionary *resultDic) {firstWindow.hidden = YES;}

這種做法確實H5頁面出現,如下圖:但是在iOS6.0系統上點擊輸入框鍵盤不會出現,iOS7.0以后,剛開始點輸入框不會出現多點幾下會出現,

點擊UITextFiled鍵盤不出現(支付寶快捷登錄)

此處打印:

 DLog(@"%@",[[UIApplication sharedApplication] windows])

 DLog(@"%@",[[UIApplication sharedApplication] keyWindow]);


windows

(

    "<UIWindow: 0x1dd9c090; frame = (0 0; 320 480); hidden = YES; autoresize = W+H; layer = <UIWindowLayer: 0x1dd9dec0>>",

    "<UIWindow: 0x1dd9fa80; frame = (0 0; 320 480); layer = <UIWindowLayer: 0x1dd9f940>>",

    "<UITextEffectsWindow: 0x1e965f20; frame = (0 0; 320 480); hidden = YES; opaque = NO; layer = <UIWindowLayer: 0x1e965e70>>"

)


keywindow  <UIWindow: 0x1dd9fa80; frame = (0 0; 320 480); layer = <UIWindowLayer: 0x1dd9f940>>



會發現有兩個UIWindow出現,[0] ,[1對應keywindow]但是一般project 中只會有一個window,怎么會出現兩個?于是將以下代碼注釋掉,

self.window = [[UIWindow allocinitWithFrame:[[UIScreen mainScreenbounds]];

項目還是可以正常運行,最后經排查原因是項目引用了main.storyboard ,所以在項目啟動時候會自動創建一個window(0x1dd9c090),之后我們又用代碼初始化一個self.window(0x1dd9fa80),并且將自己創建的self.window設置為主窗口(makekeyAndVisible),但是windows 列表中最底層的window(0x1dd9c090)并不是keywindow,所以導致H5頁面出現不了(因為支付寶H5頁面是show in windows[0]上而不是 show in keywindow 所以感覺支付寶SDK也需要優化),即使將windows[0].hidden = NO,H5頁面出現,鍵盤也不會出現,輸入框不能輸入,因為鍵盤彈出一定要在keywindow上顯示,之所以在>iOS7.0之后可以正常彈出鍵盤是因為,>iOS7.0之后,主窗口和次窗口是沒有區別的

在ios7以前中有區別:哪個是主窗口,后面設置為主窗口會把之前設置的覆蓋掉。(只有主窗口才能響應鍵盤的輸入事件

解決辦法有兩種:

1、將firstwindow --windows[0](0x1dd9c090) 設置為主窗口,

    [firstWindow makeKeyAndVisible];


2、將firstwindow == windows[0] 去掉:也就是project不引用main.storyboard,

project-->Targets-->General-->Main Interface框里內容main 置空,

或者 info.plist-->Main storyboard file base name 對應內容main 置空

或者 直接刪除引用main.storyboard  

反正是項目中不再用main.storyboard就行。

這個時候一切都沒問題了,也不用代碼:

 UIWindow *firstWindow = [[[UIApplication sharedApplicationwindowsobjectAtIndex:0];

 firstWindow.hidden = NO;

 [firstWindow makeKeyAndVisible];

 firstWindow.hidden = YES;

因為現在就只有一個window了并且就是keywindow,到現在H5頁面也會展示,鍵盤也可以呼出。

當然如果項目創建UIWindow正常的話 是不會出現這個問題的。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

嵊泗县| 遂平县| 孙吴县| 大庆市| 桦南县| 渭南市| 石城县| 酉阳| 启东市| 罗城| 泉州市| 德昌县| 土默特左旗| 六枝特区| 长春市| 政和县| 津市市| 册亨县| 西城区| 宁都县| 三门峡市| 德庆县| 凤山县| 定日县| 乐陵市| 寻乌县| 承德市| 宝兴县| 黔江区| 苍南县| 拉孜县| 德州市| 赫章县| 光山县| 荥经县| 东乡| 衡阳县| 米泉市| 资阳市| 太保市| 临泽县|