188 lines
6.6 KiB
Objective-C
188 lines
6.6 KiB
Objective-C
//
|
||
// KBPermissionViewController.m
|
||
// CustomKeyboard
|
||
//
|
||
// Created by Mac on 2025/10/27.
|
||
//
|
||
|
||
#import "KBPermissionViewController.h"
|
||
|
||
@interface KBPermissionViewController ()
|
||
@property (nonatomic, strong) UILabel *titleLabel; // 标题
|
||
@property (nonatomic, strong) UILabel *tipsLabel; // 步骤提示
|
||
@property (nonatomic, strong) UIView *cardView; // 中部卡片
|
||
@property (nonatomic, strong) UIButton *openButton; // 去设置
|
||
@property (nonatomic, strong) UILabel *helpLabel; // 底部帮助
|
||
@end
|
||
|
||
@implementation KBPermissionViewController
|
||
|
||
- (void)viewDidLoad {
|
||
[super viewDidLoad];
|
||
self.view.backgroundColor = [UIColor colorWithWhite:0.96 alpha:1.0];
|
||
|
||
// 懒加载控件 + 添加到视图
|
||
[self.view addSubview:self.backButton];
|
||
[self.view addSubview:self.titleLabel];
|
||
[self.view addSubview:self.tipsLabel];
|
||
[self.view addSubview:self.cardView];
|
||
[self.view addSubview:self.openButton];
|
||
[self.view addSubview:self.helpLabel];
|
||
|
||
// Masonry 约束
|
||
[self.backButton mas_makeConstraints:^(MASConstraintMaker *make) {
|
||
make.left.equalTo(self.view).offset(16);
|
||
make.top.equalTo(self.view.mas_safeAreaLayoutGuideTop).offset(8);
|
||
|
||
make.width.mas_equalTo(60);
|
||
make.height.mas_equalTo(32);
|
||
}];
|
||
|
||
[self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||
make.top.equalTo(self.view.mas_safeAreaLayoutGuideTop).offset(48);
|
||
|
||
make.left.equalTo(self.view).offset(24);
|
||
make.right.equalTo(self.view).offset(-24);
|
||
make.height.mas_equalTo(28);
|
||
}];
|
||
|
||
[self.tipsLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||
make.top.equalTo(self.titleLabel.mas_bottom).offset(8);
|
||
make.left.equalTo(self.view).offset(24);
|
||
make.right.equalTo(self.view).offset(-24);
|
||
}];
|
||
|
||
[self.cardView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||
make.top.equalTo(self.tipsLabel.mas_bottom).offset(28);
|
||
make.left.equalTo(self.view).offset(32);
|
||
make.right.equalTo(self.view).offset(-32);
|
||
make.height.mas_equalTo(260);
|
||
}];
|
||
|
||
[self.openButton mas_makeConstraints:^(MASConstraintMaker *make) {
|
||
make.top.equalTo(self.cardView.mas_bottom).offset(32);
|
||
make.left.equalTo(self.view).offset(32);
|
||
make.right.equalTo(self.view).offset(-32);
|
||
make.height.mas_equalTo(48);
|
||
}];
|
||
|
||
[self.helpLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||
make.top.equalTo(self.openButton.mas_bottom).offset(12);
|
||
make.left.equalTo(self.view).offset(24);
|
||
make.right.equalTo(self.view).offset(-24);
|
||
}];
|
||
}
|
||
|
||
#pragma mark - Actions
|
||
|
||
- (void)onBack {
|
||
// 支持两种展示方式:
|
||
// 1) 作为子控制器嵌入(无 presentingViewController)→ 交由回调让父 VC 处理(通常 pop)
|
||
// 2) 作为模态弹出 → 按原策略先 pop 再 dismiss
|
||
UIViewController *presenter = self.presentingViewController;
|
||
if (!presenter) {
|
||
if (self.backHandler) self.backHandler();
|
||
return;
|
||
}
|
||
|
||
UINavigationController *nav = nil;
|
||
if ([presenter isKindOfClass:UINavigationController.class]) {
|
||
nav = (UINavigationController *)presenter;
|
||
} else if (presenter.navigationController) {
|
||
nav = presenter.navigationController;
|
||
}
|
||
|
||
if (nav) {
|
||
[nav popViewControllerAnimated:NO];
|
||
[nav dismissViewControllerAnimated:YES completion:^{ if (self.backHandler) self.backHandler(); }];
|
||
} else {
|
||
[self dismissViewControllerAnimated:YES completion:^{ if (self.backHandler) self.backHandler(); }];
|
||
}
|
||
}
|
||
|
||
- (void)openSettings {
|
||
NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
|
||
UIApplication *app = [UIApplication sharedApplication];
|
||
if ([app canOpenURL:url]) {
|
||
if (@available(iOS 10.0, *)) {
|
||
[app openURL:url options:@{} completionHandler:nil];
|
||
} else {
|
||
[app openURL:url];
|
||
}
|
||
}
|
||
}
|
||
|
||
#pragma mark - Lazy Subviews
|
||
|
||
- (UIButton *)backButton {
|
||
if (!_backButton) {
|
||
_backButton = [UIButton buttonWithType:UIButtonTypeSystem];
|
||
[_backButton setTitle:KBLocalized(@"common_back") forState:UIControlStateNormal];
|
||
_backButton.titleLabel.font = [UIFont systemFontOfSize:16 weight:UIFontWeightMedium];
|
||
[_backButton setTitleColor:[UIColor darkTextColor] forState:UIControlStateNormal];
|
||
[_backButton addTarget:self action:@selector(onBack) forControlEvents:UIControlEventTouchUpInside];
|
||
}
|
||
return _backButton;
|
||
}
|
||
|
||
- (UILabel *)titleLabel {
|
||
if (!_titleLabel) {
|
||
_titleLabel = [UILabel new];
|
||
_titleLabel.text = KBLocalized(@"perm_title_enable");
|
||
_titleLabel.font = [UIFont systemFontOfSize:22 weight:UIFontWeightSemibold];
|
||
_titleLabel.textColor = [UIColor blackColor];
|
||
_titleLabel.textAlignment = NSTextAlignmentCenter;
|
||
}
|
||
return _titleLabel;
|
||
}
|
||
|
||
- (UILabel *)tipsLabel {
|
||
if (!_tipsLabel) {
|
||
_tipsLabel = [UILabel new];
|
||
_tipsLabel.text = KBLocalized(@"perm_steps");
|
||
_tipsLabel.font = [UIFont systemFontOfSize:14];
|
||
_tipsLabel.textColor = [UIColor darkGrayColor];
|
||
_tipsLabel.textAlignment = NSTextAlignmentCenter;
|
||
}
|
||
return _tipsLabel;
|
||
}
|
||
|
||
- (UIView *)cardView {
|
||
if (!_cardView) {
|
||
_cardView = [UIView new];
|
||
_cardView.backgroundColor = [UIColor whiteColor];
|
||
_cardView.layer.cornerRadius = 16;
|
||
_cardView.layer.shadowColor = [UIColor colorWithWhite:0 alpha:0.1].CGColor;
|
||
_cardView.layer.shadowOpacity = 1;
|
||
_cardView.layer.shadowRadius = 12;
|
||
}
|
||
return _cardView;
|
||
}
|
||
|
||
- (UIButton *)openButton {
|
||
if (!_openButton) {
|
||
_openButton = [UIButton buttonWithType:UIButtonTypeSystem];
|
||
[_openButton setTitle:KBLocalized(@"perm_open_settings") forState:UIControlStateNormal];
|
||
_openButton.titleLabel.font = [UIFont systemFontOfSize:17 weight:UIFontWeightSemibold];
|
||
[_openButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
|
||
_openButton.backgroundColor = [UIColor colorWithRed:0.22 green:0.49 blue:0.96 alpha:1.0];
|
||
_openButton.layer.cornerRadius = 8;
|
||
[_openButton addTarget:self action:@selector(openSettings) forControlEvents:UIControlEventTouchUpInside];
|
||
}
|
||
return _openButton;
|
||
}
|
||
|
||
- (UILabel *)helpLabel {
|
||
if (!_helpLabel) {
|
||
_helpLabel = [UILabel new];
|
||
_helpLabel.text = KBLocalized(@"perm_help");
|
||
_helpLabel.font = [UIFont systemFontOfSize:12];
|
||
_helpLabel.textColor = [UIColor grayColor];
|
||
_helpLabel.textAlignment = NSTextAlignmentCenter;
|
||
_helpLabel.numberOfLines = 2;
|
||
}
|
||
return _helpLabel;
|
||
}
|
||
|
||
@end
|