66
This commit is contained in:
@@ -22,6 +22,9 @@
|
|||||||
#import "IAPVerifyTransactionObj.h"
|
#import "IAPVerifyTransactionObj.h"
|
||||||
#import "FGIAPManager.h"
|
#import "FGIAPManager.h"
|
||||||
#import "KBSexSelVC.h"
|
#import "KBSexSelVC.h"
|
||||||
|
#import <SystemConfiguration/CaptiveNetwork.h>
|
||||||
|
#import <CoreTelephony/CTCellularData.h>
|
||||||
|
|
||||||
// 注意:用于判断系统已启用本输入法扩展的 bundle id 需与扩展 target 的
|
// 注意:用于判断系统已启用本输入法扩展的 bundle id 需与扩展 target 的
|
||||||
// PRODUCT_BUNDLE_IDENTIFIER 完全一致。
|
// PRODUCT_BUNDLE_IDENTIFIER 完全一致。
|
||||||
// 当前工程的 CustomKeyboard target 为 com.loveKey.nyx.CustomKeyboard
|
// 当前工程的 CustomKeyboard target 为 com.loveKey.nyx.CustomKeyboard
|
||||||
@@ -36,11 +39,11 @@ static NSString * const kKBKeyboardExtensionBundleId = @"com.loveKey.nyx.CustomK
|
|||||||
|
|
||||||
// 首次安装先进入性别选择页;点击 Skip 或确认后再进入主 TabBar
|
// 首次安装先进入性别选择页;点击 Skip 或确认后再进入主 TabBar
|
||||||
BOOL hasShownSexVC = [[NSUserDefaults standardUserDefaults] boolForKey:KBSexSelectShownKey];
|
BOOL hasShownSexVC = [[NSUserDefaults standardUserDefaults] boolForKey:KBSexSelectShownKey];
|
||||||
// if (hasShownSexVC) {
|
if (hasShownSexVC) {
|
||||||
// [self setupRootVC];
|
[self setupRootVC];
|
||||||
// } else {
|
} else {
|
||||||
[self setupSexSelectRootVC];
|
[self setupSexSelectRootVC];
|
||||||
// }
|
}
|
||||||
|
|
||||||
// 主工程默认开启网络总开关(键盘扩展仍需用户允许完全访问后再行开启)
|
// 主工程默认开启网络总开关(键盘扩展仍需用户允许完全访问后再行开启)
|
||||||
[KBNetworkManager shared].enabled = YES;
|
[KBNetworkManager shared].enabled = YES;
|
||||||
@@ -57,11 +60,13 @@ static NSString * const kKBKeyboardExtensionBundleId = @"com.loveKey.nyx.CustomK
|
|||||||
[Bugly startWithAppId:BuglyId config:buglyConfig];
|
[Bugly startWithAppId:BuglyId config:buglyConfig];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// 键盘权限引导改由 KBGuideVC 内部负责;此处不主动弹出。
|
|
||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)applicationDidBecomeActive:(UIApplication *)application{}
|
- (void)applicationDidBecomeActive:(UIApplication *)application{
|
||||||
|
// [self kb_checkNetworkAndShowAlertIfNeeded];
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
- (void)setupRootVC{
|
- (void)setupRootVC{
|
||||||
@@ -204,6 +209,9 @@ static NSString * const kKBKeyboardExtensionBundleId = @"com.loveKey.nyx.CustomK
|
|||||||
/// 使用系统网络栈发起一次简单请求(例如拉起蜂窝数据权限弹窗)。
|
/// 使用系统网络栈发起一次简单请求(例如拉起蜂窝数据权限弹窗)。
|
||||||
/// 说明:只要真正访问网络,系统在需要时就会弹出“是否允许使用蜂窝数据”等提示。
|
/// 说明:只要真正访问网络,系统在需要时就会弹出“是否允许使用蜂窝数据”等提示。
|
||||||
- (void)kb_fireStartupNetworkRequest {
|
- (void)kb_fireStartupNetworkRequest {
|
||||||
|
// [[KBNetworkManager shared] GET:@"https://www.apple.com" parameters:nil headers:nil completion:^(id _Nullable jsonOrData, NSURLResponse * _Nullable response, NSError * _Nullable error) {
|
||||||
|
//
|
||||||
|
// }];
|
||||||
NSURL *url = [NSURL URLWithString:@"https://www.apple.com"];
|
NSURL *url = [NSURL URLWithString:@"https://www.apple.com"];
|
||||||
if (!url) { return; }
|
if (!url) { return; }
|
||||||
|
|
||||||
@@ -252,5 +260,127 @@ static BOOL KBIsKeyboardEnabled(void) {
|
|||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#pragma mark - Network check & alert
|
||||||
|
|
||||||
|
- (void)kb_checkNetworkAndShowAlertIfNeeded {
|
||||||
|
AFNetworkReachabilityStatus status = [AFNetworkReachabilityManager sharedManager].networkReachabilityStatus;
|
||||||
|
|
||||||
|
// 只有在“明确不可达”时才弹
|
||||||
|
if (status == AFNetworkReachabilityStatusNotReachable ||
|
||||||
|
status == AFNetworkReachabilityStatusUnknown) {
|
||||||
|
[self kb_showNoNetworkAlert];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)kb_showNoNetworkAlert {
|
||||||
|
UIViewController *rootVC = self.window.rootViewController;
|
||||||
|
if (!rootVC) return;
|
||||||
|
|
||||||
|
// 防止重复弹(例如已经有一个 alert 在上面了)
|
||||||
|
if ([rootVC.presentedViewController isKindOfClass:[UIAlertController class]]) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"网络不可用"
|
||||||
|
message:@"请在“设置”中检查本应用的无线数据权限或网络连接。"
|
||||||
|
preferredStyle:UIAlertControllerStyleAlert];
|
||||||
|
|
||||||
|
UIAlertAction *settings = [UIAlertAction actionWithTitle:@"去设置"
|
||||||
|
style:UIAlertActionStyleDefault
|
||||||
|
handler:^(UIAlertAction * _Nonnull action) {
|
||||||
|
[self kb_openAppSettings]; // 你已经实现好的跳设置方法
|
||||||
|
}];
|
||||||
|
|
||||||
|
UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"取消"
|
||||||
|
style:UIAlertActionStyleCancel
|
||||||
|
handler:nil];
|
||||||
|
|
||||||
|
[alert addAction:settings];
|
||||||
|
[alert addAction:cancel];
|
||||||
|
|
||||||
|
[rootVC presentViewController:alert animated:YES completion:nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
///*
|
||||||
|
// 获取网络权限状态
|
||||||
|
// */
|
||||||
|
//- (void)networkStatus:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
|
||||||
|
// //2.根据权限执行相应的交互
|
||||||
|
// CTCellularData *cellularData = [[CTCellularData alloc] init];
|
||||||
|
// /*
|
||||||
|
// 此函数会在网络权限改变时再次调用
|
||||||
|
// */
|
||||||
|
// cellularData.cellularDataRestrictionDidUpdateNotifier = ^(CTCellularDataRestrictedState state) {
|
||||||
|
// switch (state) {
|
||||||
|
// case kCTCellularDataRestricted:
|
||||||
|
//
|
||||||
|
// NSLog(@"Restricted");
|
||||||
|
// //2.1权限关闭的情况下 再次请求网络数据会弹出设置网络提示
|
||||||
|
//
|
||||||
|
// break;
|
||||||
|
// case kCTCellularDataNotRestricted:
|
||||||
|
//
|
||||||
|
// NSLog(@"NotRestricted");
|
||||||
|
// //2.2已经开启网络权限 监听网络状态
|
||||||
|
// [self addReachabilityManager:application didFinishLaunchingWithOptions:launchOptions];
|
||||||
|
// break;
|
||||||
|
// case kCTCellularDataRestrictedStateUnknown:
|
||||||
|
//
|
||||||
|
// NSLog(@"Unknown");
|
||||||
|
//
|
||||||
|
// break;
|
||||||
|
//
|
||||||
|
// default:
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
|
// };
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
///**
|
||||||
|
// 实时检查当前网络状态
|
||||||
|
// */
|
||||||
|
//- (void)addReachabilityManager:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
|
||||||
|
// AFNetworkReachabilityManager *afNetworkReachabilityManager = [AFNetworkReachabilityManager sharedManager];
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// [afNetworkReachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
|
||||||
|
// switch (status) {
|
||||||
|
// case AFNetworkReachabilityStatusNotReachable:{
|
||||||
|
// NSLog(@"网络不通:%@",@(status) );
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
|
// case AFNetworkReachabilityStatusReachableViaWiFi:{
|
||||||
|
// NSLog(@"网络通过WIFI连接:%@",@(status));
|
||||||
|
//
|
||||||
|
// [self getInfo_application:application didFinishLaunchingWithOptions:launchOptions];
|
||||||
|
//
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
|
// case AFNetworkReachabilityStatusReachableViaWWAN:{
|
||||||
|
// NSLog(@"网络通过无线连接:%@",@(status) );
|
||||||
|
//
|
||||||
|
// [self getInfo_application:application didFinishLaunchingWithOptions:launchOptions];
|
||||||
|
//
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
|
// default:
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
|
// }];
|
||||||
|
//
|
||||||
|
// [afNetworkReachabilityManager startMonitoring]; //开启网络监视器;
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
////把以前写在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions里面的一些初始化操作放在该方法
|
||||||
|
//- (void)getInfo_application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
|
||||||
|
//
|
||||||
|
//// [self.updateBusiness checkUpdateWithBothApi];//检查app更新
|
||||||
|
//
|
||||||
|
////发送通知给APP首屏页面,让其有网络时重新请求
|
||||||
|
// [[NSNotificationCenter defaultCenter] postNotificationName:AFNetworkingReachabilityDidChangeNotification object:nil];
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -7,6 +7,13 @@
|
|||||||
|
|
||||||
#import "KBSexSelVC.h"
|
#import "KBSexSelVC.h"
|
||||||
|
|
||||||
|
/// 性别类型
|
||||||
|
typedef NS_ENUM(NSInteger, KBSexOption) {
|
||||||
|
KBSexOptionMale = 0,
|
||||||
|
KBSexOptionFemale,
|
||||||
|
KBSexOptionOther
|
||||||
|
};
|
||||||
|
|
||||||
@interface KBSexSelVC ()
|
@interface KBSexSelVC ()
|
||||||
|
|
||||||
// 顶部区域
|
// 顶部区域
|
||||||
@@ -38,6 +45,9 @@
|
|||||||
//@property (nonatomic, strong) CAGradientLayer *topGradientLayer;
|
//@property (nonatomic, strong) CAGradientLayer *topGradientLayer;
|
||||||
@property (nonatomic, strong) UIImageView *bgImageView; // 全屏背景图
|
@property (nonatomic, strong) UIImageView *bgImageView; // 全屏背景图
|
||||||
|
|
||||||
|
/// 当前选中的性别
|
||||||
|
@property (nonatomic, assign) KBSexOption selectedSex;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation KBSexSelVC
|
@implementation KBSexSelVC
|
||||||
@@ -54,6 +64,9 @@
|
|||||||
make.edges.equalTo(self.view);
|
make.edges.equalTo(self.view);
|
||||||
}];
|
}];
|
||||||
[self setupUI];
|
[self setupUI];
|
||||||
|
|
||||||
|
// 默认选中 Male
|
||||||
|
[self kb_updateSelection:KBSexOptionMale];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)viewDidLayoutSubviews {
|
- (void)viewDidLayoutSubviews {
|
||||||
@@ -89,6 +102,13 @@
|
|||||||
// 底部按钮
|
// 底部按钮
|
||||||
[self.view addSubview:self.confirmButton];
|
[self.view addSubview:self.confirmButton];
|
||||||
|
|
||||||
|
// 点击卡片切换选中状态
|
||||||
|
UITapGestureRecognizer *tapMale = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onMaleCardTapped)];
|
||||||
|
[self.maleCardView addGestureRecognizer:tapMale];
|
||||||
|
UITapGestureRecognizer *tapFemale = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onFemaleCardTapped)];
|
||||||
|
[self.femaleCardView addGestureRecognizer:tapFemale];
|
||||||
|
UITapGestureRecognizer *tapOther = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onOtherCardTapped)];
|
||||||
|
[self.otherCardView addGestureRecognizer:tapOther];
|
||||||
|
|
||||||
|
|
||||||
// 跳过按钮右上角(跟随安全区)
|
// 跳过按钮右上角(跟随安全区)
|
||||||
@@ -188,6 +208,21 @@
|
|||||||
|
|
||||||
#pragma mark - Actions
|
#pragma mark - Actions
|
||||||
|
|
||||||
|
/// 点击男生卡片
|
||||||
|
- (void)onMaleCardTapped {
|
||||||
|
[self kb_updateSelection:KBSexOptionMale];
|
||||||
|
}
|
||||||
|
|
||||||
|
/// 点击女生卡片
|
||||||
|
- (void)onFemaleCardTapped {
|
||||||
|
[self kb_updateSelection:KBSexOptionFemale];
|
||||||
|
}
|
||||||
|
|
||||||
|
/// 点击第三性别卡片
|
||||||
|
- (void)onOtherCardTapped {
|
||||||
|
[self kb_updateSelection:KBSexOptionOther];
|
||||||
|
}
|
||||||
|
|
||||||
/// 点击跳过
|
/// 点击跳过
|
||||||
- (void)onSkipTapped {
|
- (void)onSkipTapped {
|
||||||
// 触发回调,让外部(如 AppDelegate)切换到主 TabBar
|
// 触发回调,让外部(如 AppDelegate)切换到主 TabBar
|
||||||
@@ -208,6 +243,22 @@
|
|||||||
[[NSUserDefaults standardUserDefaults] synchronize];
|
[[NSUserDefaults standardUserDefaults] synchronize];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// 根据当前选中的性别更新三个卡片的 UI
|
||||||
|
- (void)kb_updateSelection:(KBSexOption)sex {
|
||||||
|
self.selectedSex = sex;
|
||||||
|
|
||||||
|
[self kb_updateCard:self.maleCardView selected:(sex == KBSexOptionMale)];
|
||||||
|
[self kb_updateCard:self.femaleCardView selected:(sex == KBSexOptionFemale)];
|
||||||
|
[self kb_updateCard:self.otherCardView selected:(sex == KBSexOptionOther)];
|
||||||
|
}
|
||||||
|
|
||||||
|
/// 统一设置卡片的选中/未选中样式
|
||||||
|
- (void)kb_updateCard:(UIView *)card selected:(BOOL)selected {
|
||||||
|
card.layer.borderWidth = selected ? 2.0 : 0.0;
|
||||||
|
card.layer.borderColor = selected ? [UIColor colorWithHex:KBColorValue].CGColor : [UIColor clearColor].CGColor;
|
||||||
|
card.backgroundColor = selected ? [UIColor whiteColor] : [UIColor colorWithHex:0xFAFAFA];
|
||||||
|
}
|
||||||
|
|
||||||
#pragma mark - Lazy UI
|
#pragma mark - Lazy UI
|
||||||
|
|
||||||
|
|
||||||
@@ -257,10 +308,12 @@
|
|||||||
- (UIView *)maleCardView {
|
- (UIView *)maleCardView {
|
||||||
if (!_maleCardView) {
|
if (!_maleCardView) {
|
||||||
_maleCardView = [UIView new];
|
_maleCardView = [UIView new];
|
||||||
_maleCardView.backgroundColor = [UIColor whiteColor];
|
// 默认未选中背景
|
||||||
|
_maleCardView.backgroundColor = [UIColor colorWithHex:0xFAFAFA];
|
||||||
_maleCardView.layer.cornerRadius = 24.0;
|
_maleCardView.layer.cornerRadius = 24.0;
|
||||||
_maleCardView.layer.masksToBounds = YES;
|
_maleCardView.layer.masksToBounds = YES;
|
||||||
_maleCardView.layer.borderWidth = 2.0;
|
// 边框样式由 kb_updateSelection 统一控制,这里先不设置宽度
|
||||||
|
_maleCardView.layer.borderWidth = 0.0;
|
||||||
_maleCardView.layer.borderColor = [UIColor colorWithHex:KBColorValue].CGColor;
|
_maleCardView.layer.borderColor = [UIColor colorWithHex:KBColorValue].CGColor;
|
||||||
}
|
}
|
||||||
return _maleCardView;
|
return _maleCardView;
|
||||||
|
|||||||
@@ -8,6 +8,8 @@
|
|||||||
#import "UIColor+Extension.h"
|
#import "UIColor+Extension.h"
|
||||||
#import "KBPersonInfoVC.h"
|
#import "KBPersonInfoVC.h"
|
||||||
#import "KBMyKeyBoardVC.h"
|
#import "KBMyKeyBoardVC.h"
|
||||||
|
#import "KBJfPay.h"
|
||||||
|
#import "KBVipPay.h"
|
||||||
|
|
||||||
@interface KBMyHeaderView ()
|
@interface KBMyHeaderView ()
|
||||||
@property (nonatomic, strong) UILabel *titleLabel;
|
@property (nonatomic, strong) UILabel *titleLabel;
|
||||||
@@ -202,7 +204,13 @@
|
|||||||
KBPersonInfoVC *vc = [[KBPersonInfoVC alloc] init];
|
KBPersonInfoVC *vc = [[KBPersonInfoVC alloc] init];
|
||||||
[KB_CURRENT_NAV pushViewController:vc animated:true];
|
[KB_CURRENT_NAV pushViewController:vc animated:true];
|
||||||
}
|
}
|
||||||
- (void)onLeftCardTap { if (self.onLeftCardTapped) { self.onLeftCardTapped(); } }
|
- (void)onLeftCardTap {
|
||||||
- (void)onRightCardTap { if (self.onRightCardTapped) { self.onRightCardTapped(); } }
|
KBVipPay *vc = [[KBVipPay alloc] init];
|
||||||
|
[KB_CURRENT_NAV pushViewController:vc animated:true];
|
||||||
|
}
|
||||||
|
- (void)onRightCardTap {
|
||||||
|
KBJfPay *vc = [[KBJfPay alloc] init];
|
||||||
|
[KB_CURRENT_NAV pushViewController:vc animated:true];
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
Reference in New Issue
Block a user