Files
featherVoice/TUIKit/TUIContact/CommonUI/TUIStyleSelectViewController.m
2025-08-08 10:49:36 +08:00

299 lines
9.8 KiB
Objective-C
Raw 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.

//
// TUIStyleSelectViewController.m
// TUIKitDemo
//
// Created by wyl on 2022/11/7.
// Copyright © 2022 Tencent. All rights reserved.
//
#import "TUIStyleSelectViewController.h"
#import <TIMCommon/TIMDefine.h>
#import <TUICore/TUIDarkModel.h>
#import <TUICore/TUIGlobalization.h>
#import <TUICore/TUIThemeManager.h>
@implementation TUIStyleSelectCell
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
[self setupViews];
}
return self;
}
- (void)setCellModel:(TUIStyleSelectCellModel *)cellModel {
_cellModel = cellModel;
self.nameLabel.text = cellModel.styleName;
self.nameLabel.textColor = cellModel.selected ? RGBA(0, 110, 255, 1) : TIMCommonDynamicColor(@"form_title_color", @"#000000");
self.chooseIconView.hidden = !cellModel.selected;
// tell constraints they need updating
[self setNeedsUpdateConstraints];
// update constraints now so we can animate the change
[self updateConstraintsIfNeeded];
[self layoutIfNeeded];
}
- (void)setupViews {
[self.contentView addSubview:self.nameLabel];
[self.contentView addSubview:self.chooseIconView];
}
+ (BOOL)requiresConstraintBasedLayout {
return YES;
}
// this is Apple's recommended place for adding/updating constraints
- (void)updateConstraints {
[super updateConstraints];
[self.chooseIconView mas_remakeConstraints:^(MASConstraintMaker *make) {
make.centerY.mas_equalTo(self.contentView);
make.width.mas_equalTo(20);
make.height.mas_equalTo(20);
make.trailing.mas_equalTo(-16);
}];
[self.nameLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
make.leading.mas_equalTo(16);
make.trailing.mas_equalTo(self.chooseIconView.mas_leading).mas_offset(-2);
make.height.mas_equalTo(self.nameLabel.font.lineHeight);
make.centerY.mas_equalTo(self.contentView);
}];
}
- (UILabel *)nameLabel {
if (_nameLabel == nil) {
_nameLabel = [[UILabel alloc] init];
_nameLabel.font = [UIFont systemFontOfSize:16.0];
_nameLabel.text = @"1233";
_nameLabel.textAlignment = isRTL()?NSTextAlignmentRight:NSTextAlignmentLeft;
_nameLabel.textColor = TIMCommonDynamicColor(@"form_title_color", @"#000000");
}
return _nameLabel;
}
- (UIImageView *)chooseIconView {
if (_chooseIconView == nil) {
_chooseIconView = [[UIImageView alloc] init];
_chooseIconView.image = TIMCommonBundleImage(@"default_choose");
}
return _chooseIconView;
}
@end
@implementation TUIStyleSelectCellModel
@end
@interface TUIStyleSelectViewController () <UITableViewDelegate, UITableViewDataSource>
@property(nonatomic, strong) TUINaviBarIndicatorView *titleView;
@property(nonatomic, strong) UITableView *tableView;
@property(nonatomic, strong) NSMutableArray *datas;
@property(nonatomic, strong) TUIStyleSelectCellModel *selectModel;
@end
@implementation TUIStyleSelectViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self setupViews];
[self prepareData];
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
if (@available(iOS 15.0, *)) {
UINavigationBarAppearance *appearance = [UINavigationBarAppearance new];
[appearance configureWithDefaultBackground];
appearance.shadowColor = nil;
appearance.backgroundEffect = nil;
appearance.backgroundColor = self.tintColor;
self.navigationController.navigationBar.backgroundColor = self.tintColor;
self.navigationController.navigationBar.barTintColor = self.tintColor;
self.navigationController.navigationBar.shadowImage = [UIImage new];
self.navigationController.navigationBar.standardAppearance = appearance;
/**
* iOS15
* New feature in iOS15: sliding border style
*/
self.navigationController.navigationBar.scrollEdgeAppearance = appearance;
} else {
self.navigationController.navigationBar.backgroundColor = self.tintColor;
self.navigationController.navigationBar.barTintColor = self.tintColor;
self.navigationController.navigationBar.shadowImage = [UIImage new];
}
self.navigationController.view.backgroundColor = TIMCommonDynamicColor(@"controller_bg_color", @"#F2F3F5");
self.navigationController.navigationBarHidden = NO;
}
- (UIColor *)tintColor {
return TIMCommonDynamicColor(@"head_bg_gradient_start_color", @"#EBF0F6");
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
self.navigationController.navigationBarHidden = YES;
}
- (void)setupViews {
self.edgesForExtendedLayout = UIRectEdgeNone;
self.automaticallyAdjustsScrollViewInsets = NO;
/**
* Not setting it will cause some problems such as confusion in position, no animation, etc.
*/
self.definesPresentationContext = YES;
self.navigationController.navigationBarHidden = NO;
_titleView = [[TUINaviBarIndicatorView alloc] init];
[_titleView setTitle:TIMCommonLocalizableString(TIMAppSelectStyle)];
self.navigationItem.titleView = _titleView;
self.navigationItem.title = @"";
UIImage *image = TIMCommonDynamicImage(@"nav_back_img", [UIImage imageNamed:@"ic_back_white"]);
image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
image = [image rtl_imageFlippedForRightToLeftLayoutDirection];
UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];
[backButton setImage:image forState:UIControlStateNormal];
[backButton addTarget:self action:@selector(back) forControlEvents:UIControlEventTouchUpInside];
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:backButton];
self.navigationItem.hidesBackButton = YES;
[self.view addSubview:self.tableView];
}
- (void)back {
[self.navigationController popViewControllerAnimated:YES];
}
- (void)prepareData {
TUIStyleSelectCellModel *classic = [[TUIStyleSelectCellModel alloc] init];
classic.styleID = @"Classic";
classic.styleName = TIMCommonLocalizableString(TUIKitClassic);
classic.selected = NO;
TUIStyleSelectCellModel *mini = [[TUIStyleSelectCellModel alloc] init];
mini.styleID = @"Minimalist";
mini.styleName = TIMCommonLocalizableString(TUIKitMinimalist);
mini.selected = NO;
self.datas = [NSMutableArray arrayWithArray:@[ classic, mini ]];
NSString *styleID = [[NSUserDefaults standardUserDefaults] objectForKey:@"StyleSelectkey"];
for (TUIStyleSelectCellModel *cellModel in self.datas) {
if ([cellModel.styleID isEqual:styleID]) {
cellModel.selected = YES;
self.selectModel = cellModel;
break;
}
}
}
#pragma mark - UITableViewDelegate, UITableViewDataSource
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
return 0.0;
}
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
return 0.0;
}
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
return [UIView new];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return self.datas.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
TUIStyleSelectCellModel *cellModel = self.datas[indexPath.row];
TUIStyleSelectCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
cell.cellModel = cellModel;
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView deselectRowAtIndexPath:indexPath animated:NO];
TUIStyleSelectCellModel *cellModel = self.datas[indexPath.row];
[[NSUserDefaults standardUserDefaults] setValue:cellModel.styleID forKey:@"StyleSelectkey"];
[NSUserDefaults.standardUserDefaults synchronize];
/**
* Handling UI selection
*/
self.selectModel.selected = NO;
cellModel.selected = YES;
self.selectModel = cellModel;
[tableView reloadData];
/**
* Notify page dynamic refresh
*/
__weak typeof(self) weakSelf = self;
dispatch_async(dispatch_get_main_queue(), ^{
if ([weakSelf.delegate respondsToSelector:@selector(onSelectStyle:)]) {
[weakSelf.delegate onSelectStyle:cellModel];
}
});
}
- (UITableView *)tableView {
if (_tableView == nil) {
_tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStyleGrouped];
_tableView.delegate = self;
_tableView.dataSource = self;
_tableView.backgroundColor = TIMCommonDynamicColor(@"controller_bg_color", @"#FFFFFF");
[_tableView registerClass:TUIStyleSelectCell.class forCellReuseIdentifier:@"cell"];
}
return _tableView;
}
- (void)setBackGroundColor:(UIColor *)color {
self.view.backgroundColor = color;
self.tableView.backgroundColor = color;
}
- (NSMutableArray *)datas {
if (_datas == nil) {
_datas = [NSMutableArray array];
}
return _datas;
}
+ (NSString *)getCurrentStyleSelectID {
NSString *styleID = [[NSUserDefaults standardUserDefaults] objectForKey:@"StyleSelectkey"];
if (IS_NOT_EMPTY_NSSTRING(styleID)) {
return styleID;
} else {
// First Init
NSString *initStyleID = kTUIKitFirstInitAppStyleID;
[[NSUserDefaults standardUserDefaults] setValue:initStyleID forKey:@"StyleSelectkey"];
[NSUserDefaults.standardUserDefaults synchronize];
return initStyleID;
}
}
+ (BOOL)isClassicEntrance {
NSString *styleID = [self.class getCurrentStyleSelectID];
if ([styleID isKindOfClass:NSString.class]) {
if (styleID.length > 0) {
if ([styleID isEqualToString:@"Classic"]) {
return YES;
}
}
}
return NO;
}
@end