Commit f717792e authored by IOS-张 博's avatar IOS-张 博

Merge branch 'dev3.0.10' of http://git.quantgroup.cn/APP/VirtualCard-iOS into dev3.0.10

parents 66125a6f b703cda2
...@@ -26,10 +26,11 @@ typedef NS_ENUM(NSInteger,QGActivityPosition) ...@@ -26,10 +26,11 @@ typedef NS_ENUM(NSInteger,QGActivityPosition)
/// 便利构造器 /// 便利构造器
+ (instancetype)shareInstance; + (instancetype)shareInstance;
/// 展示某个位置的活动弹窗 /// 因为弹窗会发生变化,去掉这个初始化
/// @param position 位置 ///// 展示某个位置的活动弹窗
/// @param controller 承载弹窗的父控制器 ///// @param position 位置
- (void)showActivitiesAtPosition:(QGActivityPosition)position inController:(UIViewController *)controller; ///// @param controller 承载弹窗的父控制器
//- (void)showActivitiesAtPosition:(QGActivityPosition)position inController:(UIViewController *)controller;
/// 如果包含多个弹窗,在ViewController的viewDidAppear调用此方法 /// 如果包含多个弹窗,在ViewController的viewDidAppear调用此方法
- (void)viewDidAppearAtPosition:(QGActivityPosition)position inController:(UIViewController *)controller; - (void)viewDidAppearAtPosition:(QGActivityPosition)position inController:(UIViewController *)controller;
......
...@@ -24,6 +24,19 @@ ...@@ -24,6 +24,19 @@
#import "QGUserInfo.h" #import "QGUserInfo.h"
#import "QGGlobalConst.h" #import "QGGlobalConst.h"
@interface QGActivityPopControlModel : NSObject
/// 弹窗位置
@property (nonatomic, assign) NSInteger position ;
/// 是否需要刷新
@property (nonatomic,assign) BOOL shouldReset;
@end
@implementation QGActivityPopControlModel
@end
@interface QGActivityPopManager () @interface QGActivityPopManager ()
...@@ -34,6 +47,14 @@ ...@@ -34,6 +47,14 @@
/// 等候显示的视图集合[QGActivityPopView] ,一旦用户切换了页面,那么这个页面的弹窗就会暂时进入等待显示集合, /// 等候显示的视图集合[QGActivityPopView] ,一旦用户切换了页面,那么这个页面的弹窗就会暂时进入等待显示集合,
@property (nonatomic, strong)NSMutableArray *waitPops; @property (nonatomic, strong)NSMutableArray *waitPops;
/// 显示弹窗的类的集合
@property (nonatomic, strong)NSMutableArray *popIndexs;
///本次获取的已经显示和尚未显示的弹窗集合,便于清除
@property (nonatomic, strong)NSMutableArray *activePopViews;
///本次获取的已经显示和尚未显示的浮窗集合,便于清除
@property (nonatomic, strong)NSMutableArray *floatsPopViews;
/// 所有浮窗视图集合 /// 所有浮窗视图集合
@property (nonatomic, strong)NSMutableDictionary *floatsPops; @property (nonatomic, strong)NSMutableDictionary *floatsPops;
/// 用户已经交互过浮窗id集合 /// 用户已经交互过浮窗id集合
...@@ -80,36 +101,78 @@ static NSString * floats_pop_sets = @"floats_pop_sets"; ...@@ -80,36 +101,78 @@ static NSString * floats_pop_sets = @"floats_pop_sets";
/// 等待显示的弹窗集合 /// 等待显示的弹窗集合
self.waitPops = [NSMutableArray array]; self.waitPops = [NSMutableArray array];
self.floatsPops = [NSMutableDictionary dictionary]; self.floatsPops = [NSMutableDictionary dictionary];
self.popIndexs = [NSMutableArray arrayWithCapacity:1];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(removeAllPopViews) name:ModelCenterUserLoginNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(resetAllPopViews) name:ModelCenterUserLoginNotification object:nil];
} }
return self; return self;
} }
/// 展示某个位置的活动弹窗
/// @param position 位置 /// 移除当前所有的弹窗
/// @param controller 承载弹窗的父控制器 - (void)removeAllPopViews
- (void)showActivitiesAtPosition:(QGActivityPosition)position
inController:(UIViewController *)controller
{ {
if (position == 0) return; /// 移除当前所有的弹窗视图
if (controller.view == nil) return; if (self.activePopViews.count) {
@weakify(self); [self.activePopViews enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
/// 网络获取该位置的活动弹窗 [obj removeFromSuperview];
[self requestActivitiesWithIndex:position complete:^(NSArray *activities,NSArray *floats){ }];
@strongify(self); [self.activePopViews removeAllObjects];
/// 配置第一个弹窗 }
[self configsActivitiesWithIndex:position controller:controller]; /// 移除所有浮窗视图
/// 配置浮窗 if (self.floatsPopViews.count) {
[self configFloatWithIndex:position controller:controller]; [self.floatsPopViews enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
[obj removeFromSuperview];
}]; }];
[self.floatsPopViews removeAllObjects];
}
[self.activePops removeAllObjects];
/// 清空本地的标记
[self cleanLocalUniques];
for (QGActivityPopControlModel *model in self.popIndexs) {
model.shouldReset = YES;
}
}
/// 重新设置所有的弹窗
- (void)resetAllPopViews
{
} }
#pragma mark - 网络模块 #pragma mark - 网络模块
/// 检查当前记录是否包含本次弹窗位置
/// 如果不包含记录本次弹窗的位置,以便于下次刷新
- (QGActivityPopControlModel *)checkPopHadContainsWithIndex:(NSInteger)index
{
__block QGActivityPopControlModel *model = nil;
[self.popIndexs enumerateObjectsUsingBlock:^(QGActivityPopControlModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if (obj.position == index) {
model = obj;
*stop = YES;
}
}];
if (!model) {
model = [[QGActivityPopControlModel alloc]init];
model.position = index;
[self.popIndexs addObject:model];
}
return model;
}
/// 内部方法,获取指定位置的活动弹窗 /// 内部方法,获取指定位置的活动弹窗
/// @param index 位置 /// @param index 位置
- (void)requestActivitiesWithIndex:(NSInteger)index complete:(void(^)(NSArray *activities,NSArray *floats))complete - (void)requestActivitiesWithIndex:(NSInteger)index complete:(void(^)(NSArray *activities,NSArray *floats))complete
{ {
/// 标记本次弹窗请求位置
QGActivityPopControlModel *model = [self checkPopHadContainsWithIndex:index];
/// 请求数据开始
QGTalosNetwork *networking = [QGTalosNetwork shareManager]; QGTalosNetwork *networking = [QGTalosNetwork shareManager];
/// 参数传递 /// 参数传递
NSMutableDictionary *param = [NSMutableDictionary dictionary]; NSMutableDictionary *param = [NSMutableDictionary dictionary];
...@@ -131,6 +194,8 @@ static NSString * floats_pop_sets = @"floats_pop_sets"; ...@@ -131,6 +194,8 @@ static NSString * floats_pop_sets = @"floats_pop_sets";
if (complete) { if (complete) {
complete(activityModels,floatsModels); complete(activityModels,floatsModels);
} }
/// 弹窗不会再次刷新
model.shouldReset = NO;
} }
} failure:^(NSURLSessionDataTask * _Nonnull task, NSError * _Nonnull error) { } failure:^(NSURLSessionDataTask * _Nonnull task, NSError * _Nonnull error) {
/// 如果失败,不提示,不做处理 /// 如果失败,不提示,不做处理
...@@ -142,7 +207,7 @@ static NSString * floats_pop_sets = @"floats_pop_sets"; ...@@ -142,7 +207,7 @@ static NSString * floats_pop_sets = @"floats_pop_sets";
/// 配置当前要显示的弹窗,默认是集合[0]的对象 /// 配置当前要显示的弹窗,默认是集合[0]的对象
/// @param index 弹窗的位置 /// @param index 弹窗的位置
/// @param controller 显示的父视图 /// @param controller 显示的父视图
- (void)configsActivitiesWithIndex:(NSInteger)index controller:(UIViewController *)controller - (void)configsActivitieViewsWithIndex:(NSInteger)index controller:(UIViewController *)controller
{ {
/// 第一次显示防止多线程同时访问,加锁 /// 第一次显示防止多线程同时访问,加锁
[self.configLock lock]; [self.configLock lock];
...@@ -154,25 +219,14 @@ static NSString * floats_pop_sets = @"floats_pop_sets"; ...@@ -154,25 +219,14 @@ static NSString * floats_pop_sets = @"floats_pop_sets";
@weakify(self); @weakify(self);
dispatch_async(dispatch_get_main_queue(), ^{ dispatch_async(dispatch_get_main_queue(), ^{
/// 获取最上面的弹窗 /// 获取最上面的弹窗
QGActivityPopModel *model = [list firstObject]; for (QGActivityPopModel *model in list) {
/// 初始化弹窗系统 /// 初始化弹窗系统
QGActivityPopView *pop = [[QGActivityPopView alloc] initWithPopModel:model]; QGActivityPopView *pop = [[QGActivityPopView alloc] initWithPopModel:model];
pop.position = index; pop.position = index;
pop.controller = controller; pop.controller = controller;
__weak typeof(pop) weakPop = pop; [self.activePopViews addObject:pop];
/// 如果当前视图没有切换就直接显示,如果切换了就等待 /// 加入待展示
if (![self canShowStatusWithController:controller] ) { [self.waitPops addObject:pop];
[self.waitPops addObject:weakPop];
}else{
////浮窗显示
[pop showInView:controller.view];
if (model.showType == 3) {
[self saveUniqueIdWithModel:model];
}
/// 统计
QGAppCoreModelClickEvent *event = [QGAppCoreModelClickEvent acmcEventWithPage:[self pageNameWithIndex:index] path:nil name:nil detail_name:@"显示弹窗"];
[QGAnalyticsService analyticsTrackWithEvent:event];
}
/// 点击事件 /// 点击事件
pop.activityDismissBlock = ^(NSInteger position,QGActivityPopModel *popModel, UIViewController *aController,BOOL isClose) { pop.activityDismissBlock = ^(NSInteger position,QGActivityPopModel *popModel, UIViewController *aController,BOOL isClose) {
@strongify(self); @strongify(self);
...@@ -187,10 +241,14 @@ static NSString * floats_pop_sets = @"floats_pop_sets"; ...@@ -187,10 +241,14 @@ static NSString * floats_pop_sets = @"floats_pop_sets";
} }
[self configNextActivityWithIndex:position controller:aController]; [self configNextActivityWithIndex:position controller:aController];
}; };
}
/// 立刻展示第一个
[self showActiesViewsWithIndex:index inController:controller];
}); });
/// 显示完成解锁 /// 显示完成解锁
[self.configLock unlock]; [self.configLock unlock];
} }
- (BOOL)canShowStatusWithController:(UIViewController *)controller - (BOOL)canShowStatusWithController:(UIViewController *)controller
...@@ -209,6 +267,10 @@ static NSString * floats_pop_sets = @"floats_pop_sets"; ...@@ -209,6 +267,10 @@ static NSString * floats_pop_sets = @"floats_pop_sets";
} }
- (void)cleanLocalUniques
{
[[QGCacheManager shareCacheManager] removeAppConfigWithKeys:@[floats_pop_sets,activities_pop_sets]];
}
/// 显示立即标记,即showType = 3时 /// 显示立即标记,即showType = 3时
/// @param model 类型 /// @param model 类型
...@@ -260,7 +322,7 @@ static NSString * floats_pop_sets = @"floats_pop_sets"; ...@@ -260,7 +322,7 @@ static NSString * floats_pop_sets = @"floats_pop_sets";
[self.activePops setObject:muList forKey:[NSString stringWithFormat:@"%ld",(long)index]]; [self.activePops setObject:muList forKey:[NSString stringWithFormat:@"%ld",(long)index]];
sleep(2); sleep(2);
/// 重新配置新的活动窗口 /// 重新配置新的活动窗口
[self configsActivitiesWithIndex:index controller:controller]; [self showActiesViewsWithIndex:index inController:controller];
}); });
} }
...@@ -280,6 +342,7 @@ static NSString * floats_pop_sets = @"floats_pop_sets"; ...@@ -280,6 +342,7 @@ static NSString * floats_pop_sets = @"floats_pop_sets";
/// 初始化浮窗 /// 初始化浮窗
QGActivityPopModel *model = [list firstObject]; QGActivityPopModel *model = [list firstObject];
QGFloatsPopView *pop = [[QGFloatsPopView alloc]initWithModel:model]; QGFloatsPopView *pop = [[QGFloatsPopView alloc]initWithModel:model];
[self.floatsPopViews addObject:pop];
/// block触发必定是只显示一次的 /// block触发必定是只显示一次的
pop.dismissBlock = ^(QGActivityPopModel *model) { pop.dismissBlock = ^(QGActivityPopModel *model) {
NSString *today = DateManager().defaultFormatterForTimestamp([[NSDate date] timeIntervalSince1970]); NSString *today = DateManager().defaultFormatterForTimestamp([[NSDate date] timeIntervalSince1970]);
...@@ -314,7 +377,7 @@ static NSString * floats_pop_sets = @"floats_pop_sets"; ...@@ -314,7 +377,7 @@ static NSString * floats_pop_sets = @"floats_pop_sets";
return nil; return nil;
} }
#pragma mark - 弹窗和浮窗数据处理逻辑 #pragma mark - 弹窗和浮窗数据过滤
/// 对弹窗源数据进行数据过滤,并限制最大为2条 /// 对弹窗源数据进行数据过滤,并限制最大为2条
- (NSArray *)handleActivitiesWithIndex:(NSInteger)index activities:(NSArray *)popups - (NSArray *)handleActivitiesWithIndex:(NSInteger)index activities:(NSArray *)popups
...@@ -353,11 +416,11 @@ static NSString * floats_pop_sets = @"floats_pop_sets"; ...@@ -353,11 +416,11 @@ static NSString * floats_pop_sets = @"floats_pop_sets";
if (model.showType == 1) { // 点击后不再显示 if (model.showType == 1) { // 点击后不再显示
if (![self.invalidFloatPops valueForKey:[NSString stringWithFormat:@"%@",model.uniqueId]]) { if (![self.invalidFloatPops valueForKey:[NSString stringWithFormat:@"%@",model.uniqueId]]) {
[floatsModels addObject:model]; [floatsModels addObject:model];
// 浮窗只能有一个 break; // 浮窗只能有一个
break;
} }
}else if (model.showType == 2){ }else if (model.showType == 2){
[floatsModels addObject:model]; [floatsModels addObject:model];
break; // 浮窗只能有一个
} }
} }
...@@ -365,31 +428,81 @@ static NSString * floats_pop_sets = @"floats_pop_sets"; ...@@ -365,31 +428,81 @@ static NSString * floats_pop_sets = @"floats_pop_sets";
return floatsModels; return floatsModels;
} }
/// 是否需要请求数据
- (BOOL)ifNeedRequestWithIndex:(NSInteger)index
{
/// 默认不存在就是需要请求
__block BOOL shouldReset = YES;
[self.popIndexs enumerateObjectsUsingBlock:^(QGActivityPopControlModel * _Nonnull model, NSUInteger idx, BOOL * _Nonnull stop) {
if (model.position == index) {
shouldReset = model.shouldReset;
*stop = YES;
}
}];
return shouldReset;
}
#pragma mark - 查询并展示页面弹窗
/// 查询当前页面的视图展示
- (void)viewDidAppearAtPosition:(QGActivityPosition)position inController:(UIViewController *)controller - (void)viewDidAppearAtPosition:(QGActivityPosition)position inController:(UIViewController *)controller
{
if (position == 0) return;
if (controller.view == nil) return;
/// 加载
if ([self ifNeedRequestWithIndex:position]) {
@weakify(self);
/// 网络获取该位置的活动弹窗
[self requestActivitiesWithIndex:position complete:^(NSArray *activities,NSArray *floats){
@strongify(self);
/// 配置弹窗
[self configsActivitieViewsWithIndex:position controller:controller];
/// 配置浮窗
[self configFloatWithIndex:position controller:controller];
}];
}else{
///展示
[self showActiesViewsWithIndex:position inController:controller];
}
}
/// 展示弹窗
- (void)showActiesViewsWithIndex:(QGActivityPosition)position inController:(UIViewController *)controller
{ {
/// 没有等待的窗口 /// 没有等待的窗口
if (self.waitPops.count == 0) return; if (self.waitPops.count == 0) return;
/// 上锁,以防多线程同时访问 dispatch_async(dispatch_get_global_queue(0, 0), ^{
[self.lock lock];
[self.waitPops enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(QGActivityPopView * _Nonnull pop, NSUInteger idx, BOOL * _Nonnull stop) { __block QGActivityPopView *popView = nil;
[self.waitPops enumerateObjectsWithOptions:NSEnumerationConcurrent usingBlock:^(QGActivityPopView * _Nonnull pop, NSUInteger idx, BOOL * _Nonnull stop) {
if (pop.controller == controller && pop.position == position) {
popView = pop;
*stop = YES;
}
}];
if (popView) {
[self showWaitPopWith:popView];
}
});
}
/// 展示等待的视图
- (void)showWaitPopWith:(QGActivityPopView *)pop
{
dispatch_async(dispatch_get_main_queue(), ^{ dispatch_async(dispatch_get_main_queue(), ^{
if (pop.controller == controller && [self canShowStatusWithController:pop.controller] && pop.position == position) { if ([self canShowStatusWithController:pop.controller]) {
[pop showInView:pop.controller.view]; [pop showInView:pop.controller.view];
/// 显示即标记 /// 显示即标记
if (pop.popModel.showType == 3) { if (pop.popModel.showType == 3) {
[self saveUniqueIdWithModel:pop.popModel]; [self saveUniqueIdWithModel:pop.popModel];
} }
/// 一旦展示就清除
[self.waitPops removeObject:pop]; [self.waitPops removeObject:pop];
QGAppCoreModelClickEvent *event = [QGAppCoreModelClickEvent acmcEventWithPage:[self pageNameWithIndex:pop.position] path:nil name:nil detail_name:@"显示弹窗"]; QGAppCoreModelClickEvent *event = [QGAppCoreModelClickEvent acmcEventWithPage:[self pageNameWithIndex:pop.position] path:nil name:nil detail_name:@"显示弹窗"];
[QGAnalyticsService analyticsTrackWithEvent:event]; [QGAnalyticsService analyticsTrackWithEvent:event];
*stop = YES;
} }
}); });
}];
/// 解锁
[self.lock unlock];
} }
...@@ -409,4 +522,10 @@ static NSString * floats_pop_sets = @"floats_pop_sets"; ...@@ -409,4 +522,10 @@ static NSString * floats_pop_sets = @"floats_pop_sets";
return _configLock; return _configLock;
} }
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
@end @end
...@@ -17,6 +17,9 @@ typedef void (^QGActivityShouldWaitBlock)(QGActivityPopView * _Nullable pop); ...@@ -17,6 +17,9 @@ typedef void (^QGActivityShouldWaitBlock)(QGActivityPopView * _Nullable pop);
NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_BEGIN
@interface QGActivityPopView : QGBasePopView @interface QGActivityPopView : QGBasePopView
/// 是否正在显示
@property (nonatomic, assign) BOOL showing;
///位置 ///位置
@property (nonatomic, assign)NSInteger position; @property (nonatomic, assign)NSInteger position;
///在哪个类显示 ///在哪个类显示
......
...@@ -120,6 +120,7 @@ ...@@ -120,6 +120,7 @@
} }
[self removeFromSuperview]; [self removeFromSuperview];
}]; }];
self.showing = NO;
} }
/// 点击内容关闭 /// 点击内容关闭
...@@ -159,7 +160,13 @@ ...@@ -159,7 +160,13 @@
} }
}]; }];
self.showing = NO;
}
- (void)showInView:(UIView *)superView
{
[super showInView:superView];
self.showing = YES;
} }
/// 浮窗点击统计 /// 浮窗点击统计
......
...@@ -72,16 +72,16 @@ ...@@ -72,16 +72,16 @@
[self uploadIPAddress]; [self uploadIPAddress];
[self performSelector:@selector(showActivities) withObject:nil afterDelay:2.0]; // [self performSelector:@selector(showActivities) withObject:nil afterDelay:2.0];
} }
- (void)showActivities //- (void)showActivities
{ //{
QGActivityPopManager *manager = [QGActivityPopManager shareInstance]; // QGActivityPopManager *manager = [QGActivityPopManager shareInstance];
[manager showActivitiesAtPosition:QGActivityPositionHome inController:self]; // [manager showActivitiesAtPosition:QGActivityPositionHome inController:self];
//
} //}
- (void)viewDidAppear:(BOOL)animated - (void)viewDidAppear:(BOOL)animated
{ {
......
...@@ -57,7 +57,7 @@ ...@@ -57,7 +57,7 @@
// Do any additional setup after loading the view. // Do any additional setup after loading the view.
[self initNormalUI]; [self initNormalUI];
[QGActivityPopManager.shareInstance showActivitiesAtPosition:QGActivityPositionCashback inController:self]; // [QGActivityPopManager.shareInstance showActivitiesAtPosition:QGActivityPositionCashback inController:self];
} }
#pragma mark - 初始化数据 #pragma mark - 初始化数据
......
...@@ -52,7 +52,7 @@ ...@@ -52,7 +52,7 @@
[self initNormalUI]; [self initNormalUI];
[self requestMenuData]; [self requestMenuData];
//弹窗 //弹窗
[QGActivityPopManager.shareInstance showActivitiesAtPosition:QGActivityPositionMall inController:self]; // [QGActivityPopManager.shareInstance showActivitiesAtPosition:QGActivityPositionMall inController:self];
} }
......
...@@ -46,7 +46,7 @@ ...@@ -46,7 +46,7 @@
[self custemLeftDefaultBarButtonItem]; [self custemLeftDefaultBarButtonItem];
[self addRefresh]; [self addRefresh];
[QGActivityPopManager.shareInstance showActivitiesAtPosition:QGActivityPositionManager inController:self]; // [QGActivityPopManager.shareInstance showActivitiesAtPosition:QGActivityPositionManager inController:self];
} }
......
...@@ -35,7 +35,7 @@ ...@@ -35,7 +35,7 @@
// Do any additional setup after loading the view. // Do any additional setup after loading the view.
[self initNormalUI]; [self initNormalUI];
[QGActivityPopManager.shareInstance showActivitiesAtPosition:QGActivityPositionMine inController:self]; // [QGActivityPopManager.shareInstance showActivitiesAtPosition:QGActivityPositionMine inController:self];
} }
- (void)viewDidAppear:(BOOL)animated - (void)viewDidAppear:(BOOL)animated
......
...@@ -26,6 +26,15 @@ ...@@ -26,6 +26,15 @@
///上次推荐更新提示的日期 ///上次推荐更新提示的日期
#define VCCLastUpdateHintDate @"VCCLastUpdateHintDate" #define VCCLastUpdateHintDate @"VCCLastUpdateHintDate"
@interface SystemManager()
/// 内部应用粘贴板字符串
@property (nonatomic, copy)NSString *pasteboardString;
/// 内部应用粘贴板字符串
@property (nonatomic, copy)NSArray *pasteboardStrings;
@end
static SystemManager * shareManager = nil; static SystemManager * shareManager = nil;
@implementation SystemManager @implementation SystemManager
...@@ -50,8 +59,28 @@ static SystemManager * shareManager = nil; ...@@ -50,8 +59,28 @@ static SystemManager * shareManager = nil;
- (id)init
{
self = [super init];
if (self) {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(pasteboardChanged) name:UIPasteboardChangedNotification object:nil];
}
return self;
}
- (void)pasteboardChanged
{
UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
if (pasteboard.string.length) {
self.pasteboardString = pasteboard.string;
self.pasteboardStrings = pasteboard.strings;
}else{
self.pasteboardString = nil;
self.pasteboardStrings = nil;
}
}
#pragma mark - /*************************/ #pragma mark - /*************************/
...@@ -177,7 +206,7 @@ static SystemManager * shareManager = nil; ...@@ -177,7 +206,7 @@ static SystemManager * shareManager = nil;
{ {
NSString * pasteboardStr = [UIPasteboard generalPasteboard].string; NSString * pasteboardStr = [UIPasteboard generalPasteboard].string;
//发现粘贴行为弹窗 //发现粘贴行为弹窗
if (![NSString isEmpty:pasteboardStr] && pasteboardStr.length > 15) { if ([self validatePasteboardString]) {
QGPasteAlertView * alertView = [[QGPasteAlertView alloc] initWithPasteStr:pasteboardStr]; QGPasteAlertView * alertView = [[QGPasteAlertView alloc] initWithPasteStr:pasteboardStr];
[alertView showInView:nil]; [alertView showInView:nil];
//清空粘贴板 //清空粘贴板
...@@ -192,6 +221,20 @@ static SystemManager * shareManager = nil; ...@@ -192,6 +221,20 @@ static SystemManager * shareManager = nil;
} }
} }
/// 判断粘贴板的字符的有效性
- (BOOL)validatePasteboardString
{
NSString *string = [UIPasteboard generalPasteboard].string;
/// 空或者字符串长度小于15
if ([NSString isEmpty:string] || string.length <= 15) return NO;
/// 与粘贴板相同
if (self.pasteboardString && [self.pasteboardString isEqualToString:string]) return NO;
/// 纯数字
if ([string isNumber]) return NO;
return YES;
}
#pragma mark - /*************************/ #pragma mark - /*************************/
//自定义webviewUserAgent //自定义webviewUserAgent
...@@ -281,4 +324,9 @@ static SystemManager * shareManager = nil; ...@@ -281,4 +324,9 @@ static SystemManager * shareManager = nil;
} }
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
@end @end
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment