// // 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