I demo项目简介
1.1 使用Cocoapods 管理第三方库依赖
在项目目录下touch Podfile
之后声明依赖库,然后允许pod intsall
进行依赖的安装
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '9.0'
inhibit_all_warnings!
target 'AgreementView' do
pod 'Masonry'
pod 'ReactiveObjC'
pod 'AXWebViewController'
1.2 使用MVVM架构
利用ReactiveObjC
简单的实现MVVM,在 iOS 的 MVVM 实现中,使用 RAC
来在 view
和 viewModel
之间充当 binder
的角色,优雅地实现两者之间的信息同步。此外,我们还可以把 RAC 用在 model 层,使用Signal
来代表异步的数据获取操作,比如读取文件、访问数据库和网络请求等(同样可以在 MVC 的 model 层这么用)。
1.3 使用常量配置数据
配置常量:QCTConsts.h
/**
配置隐私政策链接URL
*/
extern NSString * _Nonnull const k_serviceAgreement_URL;
/**
配置隐私政策链接URL
*/
NSString * const k_serviceAgreement_URL = @"https://kunnan.blog.csdn.net";
配置本地化字符串:Localizable.strings
#define
"agree" = "同意";
"disagree" = "不同意";
1.4 同意/拒绝协议处理逻辑
会话对象新增一个属性,用于判断登录界面是否显示隐私弹框
/**
是否弹出协议框:
尚未同意时,在登录界面就需要一直展示弹框,只有点击同意才能消失弹框。
拒绝是停留在当前界面,或者退出app
*/
@property (nonatomic,assign) BOOL
- 同意协议
id _Nullable x) {
@strongify(self);
[self.modal hide:YES];
NSLog(@"同意协议,开始保存登录信息,进入首页");
// [self.viewModel.gotojumpHomeRACSubject sendNext:@1];// 读者自己实现
- 不同意协议处理逻辑
id _Nullable x) {
NSLog(@"处理方式1. 不同意协议,给温馨提示,点击我知道了,停留在当前界面。(进入死循环)");
// exit(0);
NSLog(@"处理方式2. 不同意协议,给温馨提示,点击我知道了,停留在当前界面。(进入死循环)");
[[[UIAlertView alloc]initWithTitle:QCTLocal(@"QCT_qct_Tips") message:QCTLocal(@"QCT_We_only") delegate:nil cancelButtonTitle:QCTLocal(@"QCT_Got_it") otherButtonTitles:nil, nil] show];
}];
1.5 demo下载
经不可以轻传,也不可以轻取。
想要免费意见建议的行为都是耍流氓”,他不是在请教,即使有用,也不会对你感激,他不准备付出任何代价,哪怕是一句谢谢。
一切寻求免费建议的行为都是耍流氓;愿意花钱的提问者才是真心的。
II WebVC导航栏主题的适配(iOS15)
iOS15 UI适配之导航条主题: 背景颜色、标题颜色
#pragma
+ (void)setupListnavigationItemAndBarStyle:(UIViewController*)vc{
// 修改返回箭头样式
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault;
[vc.navigationController.navigationBar setTintColor: kNavListbackArrowColor];
[vc.navigationController.navigationBar setBackgroundImage:[self createImageWithColor: [UIColor whiteColor]] forBarMetrics:UIBarMetricsDefault];
[self setupBackgroundImage4ios15:vc];
}
/**
导航栏主题的适配(iOS15)
*/
+(void)setupBackgroundImage4ios15:(UIViewController*)vc{
// 设置标题颜色
NSDictionary *dict = @{NSForegroundColorAttributeName: kNavListTextColor,NSFontAttributeName:kNavListNSFontAttributeName};
[vc.navigationController.navigationBar setTitleTextAttributes:dict];
NSDictionary *dictitem = @{NSForegroundColorAttributeName: kNavListbackArrowColor,NSFontAttributeName:kNavListUIBarButtonItemNSFontAttributeName};
for (UIBarButtonItem* item in vc.navigationItem.leftBarButtonItems) {
[item setTitleTextAttributes:dictitem forState:UIControlStateNormal];
// [item setTitleTextAttributes:dict];
}
if(@available(iOS 15.0, *)) {
UINavigationBar *navigationBar = vc.navigationController.navigationBar;
UINavigationBarAppearance *appearance = [UINavigationBarAppearance new];
appearance.titleTextAttributes =dict;
appearance.backgroundImage = [self createImageWithColor: [UIColor whiteColor]];
appearance.backgroundColor = UIColor.whiteColor;
appearance.shadowColor= UIColor.clearColor;
[UIBarButtonItem.appearance setTitleTextAttributes:dictitem forState:UIControlStateNormal];
UIBarButtonItem.appearance.tintColor =kNavListbackArrowColor;
navigationBar.standardAppearance = appearance;
navigationBar.scrollEdgeAppearance = appearance;
}else{
[vc.navigationController.navigationBar setBackgroundImage:[self createImageWithColor: [UIColor whiteColor]] forBarMetrics:UIBarMetricsDefault];
}
}
+ (UIImage *) createImageWithColor: (UIColor *) color
{
CGRect rect=CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [color CGColor]);
CGContextFillRect(context, rect);
UIImage *theImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return
标签:vc,简化版,self,iOS,UIColor,同意,appearance,navigationBar,弹窗 From: https://blog.51cto.com/iosre/5797923