Files
keyboard/keyBoard/VC/KBPermissionViewController.m
2025-11-14 16:34:01 +08:00

230 lines
7.8 KiB
Objective-C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// 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) UIButton *closeButton; // 去设置
@property (nonatomic, strong) UILabel *helpLabel; // 底部帮助
@property (nonatomic, strong) UIImageView *redImageView;
@property (nonatomic, strong) UIImageView *bgImageView;
@end
@implementation KBPermissionViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self.view addSubview:self.bgImageView];
[self.view addSubview:self.redImageView];
// 懒加载控件 + 添加到视图
[self.view addSubview:self.closeButton];
[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];
[self.bgImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(self.view);
}];
// Masonry 约束
[self.closeButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(self.view).offset(16);
make.top.equalTo(self.view.mas_safeAreaLayoutGuideTop).offset(20);
make.width.mas_equalTo(26);
make.height.mas_equalTo(26);
}];
[self.redImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.closeButton.mas_centerY);
make.right.equalTo(self.view).offset(20);
make.width.mas_equalTo(143);
make.height.mas_equalTo(132);
}];
[self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.closeButton.mas_bottom).offset(13);
make.left.equalTo(self.view).offset(22);
make.height.mas_equalTo(24);
}];
[self.tipsLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.titleLabel.mas_bottom).offset(8);
make.left.equalTo(self.titleLabel);
}];
[self.cardView mas_makeConstraints:^(MASConstraintMaker *make) {
make.bottom.equalTo(self.openButton.mas_top).offset(-36);
make.left.right.equalTo(self.view).inset(56);
make.top.equalTo(self.tipsLabel.mas_bottom).offset(36);
}];
[self.openButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.bottom.equalTo(self.view).offset(-KB_SAFE_BOTTOM-20);
make.left.equalTo(self.view).offset(47);
make.right.equalTo(self.view).offset(-47);
make.height.mas_equalTo(60);
}];
// [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];
}
}
}
- (void)closeButtonAction{
[self.navigationController popViewControllerAnimated:true];
}
#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 = (@"key of love keyboard");
_titleLabel.font = [UIFont systemFontOfSize:20 weight:UIFontWeightSemibold];
_titleLabel.textColor = [UIColor blackColor];
_titleLabel.textAlignment = NSTextAlignmentCenter;
}
return _titleLabel;
}
- (UILabel *)tipsLabel {
if (!_tipsLabel) {
_tipsLabel = [UILabel new];
_tipsLabel.text = (@"One-click to find a partner");
_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:UIButtonTypeCustom];
[_openButton setTitle:@"Turn on the keyboard" forState:UIControlStateNormal];
_openButton.titleLabel.font = [UIFont systemFontOfSize:16 weight:UIFontWeightSemibold];
[_openButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
_openButton.backgroundColor = [UIColor colorWithHex:KBBlackValue];
_openButton.layer.cornerRadius = 30;
[_openButton addTarget:self action:@selector(openSettings) forControlEvents:UIControlEventTouchUpInside];
}
return _openButton;
}
- (UIButton *)closeButton {
if (!_closeButton) {
_closeButton = [UIButton buttonWithType:UIButtonTypeCustom];
[_closeButton setImage:[UIImage imageNamed:@"close_icon"] forState:UIControlStateNormal];
[_closeButton addTarget:self action:@selector(closeButtonAction) forControlEvents:UIControlEventTouchUpInside];
}
return _closeButton;
}
- (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;
}
- (UIImageView *)bgImageView{
if (!_bgImageView) {
_bgImageView = [[UIImageView alloc] init];
_bgImageView.image = [UIImage imageNamed:@"qx_bg_icon"];
}
return _bgImageView;
}
- (UIImageView *)redImageView{
if (!_redImageView) {
_redImageView = [[UIImageView alloc] init];
_redImageView.image = [UIImage imageNamed:@"qx_ax_icon"];
}
return _redImageView;
}
@end