1
This commit is contained in:
@@ -9,6 +9,8 @@
|
||||
#import "KBGuideTopCell.h"
|
||||
#import "KBGuideKFCell.h"
|
||||
#import "KBGuideUserCell.h"
|
||||
#import "KBPermissionViewController.h"
|
||||
#import "KBKeyboardPermissionManager.h"
|
||||
|
||||
typedef NS_ENUM(NSInteger, KBGuideItemType) {
|
||||
KBGuideItemTypeTop = 0, // 顶部固定卡片
|
||||
@@ -75,12 +77,49 @@ typedef NS_ENUM(NSInteger, KBGuideItemType) {
|
||||
self.bgTap.cancelsTouchesInView = NO;
|
||||
self.bgTap.delegate = self;
|
||||
[self.tableView addGestureRecognizer:self.bgTap];
|
||||
|
||||
// 监听应用回到前台/变为活跃:用于从设置返回时再次校验权限
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(kb_checkKeyboardPermission) name:UIApplicationDidBecomeActiveNotification object:nil];
|
||||
}
|
||||
|
||||
- (void)dealloc {
|
||||
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
||||
}
|
||||
|
||||
- (void)viewWillAppear:(BOOL)animated {
|
||||
[super viewWillAppear:animated];
|
||||
// 每次进入页面都校验一次(包括从其它页面返回)
|
||||
[self kb_checkKeyboardPermission];
|
||||
}
|
||||
|
||||
/// 校验键盘权限:
|
||||
/// - 未启用或已启用但拒绝完全访问 => 弹出引导页
|
||||
/// - 已满足条件且正在展示引导页 => 关闭引导页
|
||||
- (void)kb_checkKeyboardPermission {
|
||||
KBKeyboardPermissionManager *mgr = [KBKeyboardPermissionManager shared];
|
||||
BOOL enabled = [mgr isKeyboardEnabled];
|
||||
KBFARecord fa = [mgr lastKnownFullAccess];
|
||||
BOOL needGuide = (!enabled) || (enabled && fa == KBFARecordDenied);
|
||||
|
||||
UIViewController *top = [UIViewController kb_topMostViewController];
|
||||
if (needGuide) {
|
||||
if (![top isKindOfClass:[KBPermissionViewController class]]) {
|
||||
KBPermissionViewController *guide = [KBPermissionViewController new];
|
||||
guide.modalPresentationStyle = UIModalPresentationFullScreen;
|
||||
__weak typeof(self) weakSelf = self;
|
||||
guide.onBack = ^{
|
||||
// 用户主动点击“返回”时,同步退出引导页
|
||||
[weakSelf.navigationController popViewControllerAnimated:YES];
|
||||
};
|
||||
[top presentViewController:guide animated:YES completion:nil];
|
||||
}
|
||||
} else {
|
||||
if ([top isKindOfClass:[KBPermissionViewController class]]) {
|
||||
[top dismissViewControllerAnimated:YES completion:nil];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
- (void)kb_didTapBackground {
|
||||
// 结束编辑,隐藏键盘
|
||||
[self.view endEditing:YES];
|
||||
|
||||
@@ -39,8 +39,8 @@
|
||||
self.tableView.tableHeaderView = header;
|
||||
[self.view addSubview:self.tableView];
|
||||
|
||||
// 数据
|
||||
self.items = @[ KBLocalized(@"home_item_lang_test") ];
|
||||
// 数据(第一个:语言测试;第二个:键盘权限引导)
|
||||
self.items = @[ KBLocalized(@"home_item_lang_test"), KBLocalized(@"home_item_keyboard_permission") ];
|
||||
|
||||
// 首次进入,聚焦到输入框方便测试键盘
|
||||
dispatch_async(dispatch_get_main_queue(), ^{ [self.textView becomeFirstResponder]; });
|
||||
@@ -56,7 +56,7 @@
|
||||
// 刷新本页涉及的多语言文案
|
||||
self.title = KBLocalized(@"home_title");
|
||||
// 重建 items 以更新本地化的 cell 标题
|
||||
self.items = @[ KBLocalized(@"home_item_lang_test") ];
|
||||
self.items = @[ KBLocalized(@"home_item_lang_test"), KBLocalized(@"home_item_keyboard_permission") ];
|
||||
[self.tableView reloadData];
|
||||
}
|
||||
|
||||
@@ -87,6 +87,10 @@
|
||||
// 多语言测试页
|
||||
KBLangTestVC *vc = [KBLangTestVC new];
|
||||
[self.navigationController pushViewController:vc animated:YES];
|
||||
} else if (indexPath.row == 1) {
|
||||
// 键盘权限引导页
|
||||
KBGuideVC *vc = [KBGuideVC new];
|
||||
[self.navigationController pushViewController:vc animated:YES];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user