PasteSelectView.m 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430
  1. //
  2. // PasteSelectView.m
  3. // VclustersGemini
  4. //
  5. // Created by APPLE on 2019/7/5.
  6. // Copyright © 2019 APPLE. All rights reserved.
  7. //
  8. #import "PasteSelectView.h"
  9. #define TAG_PASED_BASE 12345
  10. @interface PasteSelectView ()<UITableViewDelegate,UITableViewDataSource>{
  11. NSMutableArray *pasteDataAry;
  12. UIView *bgView;
  13. UILabel *tipsLabel;
  14. UIImageView *noCententImageView;
  15. UILabel *noCententLabel;
  16. UIButton *clearBtn;
  17. }
  18. @property (nonatomic, strong, nullable) UITableView *tableView;
  19. @end
  20. @implementation PasteSelectView
  21. @synthesize delegate;
  22. - (UITableView *)tableView{
  23. if (!_tableView) {
  24. _tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 304.f, SCREEN_H) style:UITableViewStylePlain];
  25. _tableView.delegate = self;
  26. _tableView.dataSource = self;
  27. _tableView.showsVerticalScrollIndicator = YES;
  28. _tableView.showsHorizontalScrollIndicator = NO;
  29. [_tableView setSeparatorStyle:(UITableViewCellSeparatorStyleNone)];
  30. [_tableView setBackgroundColor:[UIColor clearColor]];
  31. [_tableView setTableFooterView:[UIView new]];
  32. }
  33. return _tableView;
  34. }
  35. - (id)initWithFrame:(CGRect)frame{
  36. self = [super initWithFrame:frame];
  37. if (self){
  38. [self setBackgroundColor:[UIColor clearColor]];
  39. [self initData];
  40. [self drawView:frame];
  41. }
  42. return self;
  43. }
  44. - (void)initData{
  45. UIPasteboard* pasteboard = [UIPasteboard generalPasteboard];
  46. NSString *str = [pasteboard string];
  47. HLog(@"__________%s______%@____",__func__,str);
  48. if ([str rangeOfString:@"CVLUSTERS_NOUSE_"].location != NSNotFound){
  49. str = nil;
  50. }
  51. NSString* curSn = ksharedAppDelegate.DeviceThirdIdMod.data.changeSn;
  52. pasteDataAry = [HWDataManager getObjectWithKey:curSn];
  53. if([pasteDataAry isKindOfClass:[NSMutableArray class]] && [pasteDataAry isKindOfClass:[NSArray class]]){
  54. pasteDataAry = [[NSMutableArray alloc] initWithArray:pasteDataAry];
  55. }
  56. if (str){
  57. if (pasteDataAry){
  58. if (![pasteDataAry containsObject:str]){
  59. if ([pasteDataAry count] == 10){
  60. [pasteDataAry removeObjectAtIndex:9];
  61. }
  62. [pasteDataAry insertObject:str atIndex:0];
  63. }
  64. }else{
  65. pasteDataAry = [[NSMutableArray alloc] init];
  66. [pasteDataAry addObject:str];
  67. }
  68. [HWDataManager setObjectWithKey:curSn value:pasteDataAry];
  69. }
  70. }
  71. - (void)drawView:(CGRect)frame{
  72. [self setBackgroundColor:[UIColor clearColor]];
  73. CGFloat w_left_right = 57.f;
  74. // if (w_left_right > 67.f/2.f)
  75. // {
  76. // w_left_right = 67.f/2.f;
  77. // }
  78. if(SCREEN_W > SCREEN_H){
  79. w_left_right = SCREEN_W/5.0;
  80. }
  81. CGFloat h_bg = 272.f;
  82. UIImage *demoPhoneBtnImage = [UIImage imageNamed:@"jianqieban_guanbi_icon"];
  83. bgView = [[UIView alloc] init];
  84. [bgView setBackgroundColor:RGBACOLOR(0 , 0, 0, 0.6)];
  85. [bgView.layer setCornerRadius:20.f];
  86. bgView.clipsToBounds = YES;
  87. [self addSubview:bgView];
  88. [bgView mas_makeConstraints:^(MASConstraintMaker *make) {
  89. make.left.mas_equalTo(w_left_right);
  90. make.right.mas_equalTo(-w_left_right);
  91. make.height.mas_equalTo(h_bg);
  92. make.centerY.equalTo(self.mas_centerY).offset(-(demoPhoneBtnImage.size.height + 30.f/2.f)/2.f);
  93. }];
  94. CGFloat w_left_right_btn = 30.f/2.f;
  95. /*删除按钮*/
  96. UIButton *demoPhoneBtn = [[UIButton alloc] init];
  97. [demoPhoneBtn setBackgroundColor:[UIColor clearColor]];
  98. [demoPhoneBtn addTarget:self
  99. action:@selector(removeFromSuperview)
  100. forControlEvents:(UIControlEventTouchUpInside)];
  101. [demoPhoneBtn setImage:demoPhoneBtnImage forState:(UIControlStateNormal)];
  102. [self addSubview:demoPhoneBtn];
  103. [demoPhoneBtn mas_makeConstraints:^(MASConstraintMaker *make) {
  104. make.centerX.equalTo(self->bgView.mas_centerX);
  105. make.width.mas_equalTo(demoPhoneBtnImage.size.width);
  106. make.height.mas_equalTo(demoPhoneBtnImage.size.height);
  107. make.top.equalTo(self->bgView.mas_bottom).offset(30.f/2.f);
  108. }];
  109. /*上方文字*/
  110. tipsLabel = [[UILabel alloc] init];
  111. [tipsLabel setBackgroundColor:[UIColor clearColor]];
  112. [tipsLabel setTextColor:[UIColor whiteColor]];
  113. [tipsLabel setFont:[UIFont systemFontOfSize:18.f]];
  114. [tipsLabel setTextAlignment:(NSTextAlignmentCenter)];
  115. NSInteger numStr = 0;
  116. if (pasteDataAry){
  117. numStr = [pasteDataAry count];
  118. }
  119. [tipsLabel setText:@"剪贴板"];
  120. [bgView addSubview:tipsLabel];
  121. [tipsLabel mas_makeConstraints:^(MASConstraintMaker *make) {
  122. make.left.mas_equalTo(w_left_right_btn);
  123. make.right.mas_equalTo(-w_left_right_btn);
  124. make.height.mas_equalTo(21.f);
  125. make.top.mas_equalTo(15);
  126. }];
  127. /*清空按钮*/
  128. clearBtn = [[UIButton alloc] init];
  129. [clearBtn setBackgroundColor:COLOR_ENABLE_BTN];
  130. [clearBtn setTitle:@"清空" forState:(UIControlStateNormal)];
  131. [clearBtn setTitleColor:[UIColor whiteColor] forState:(UIControlStateNormal)];
  132. [clearBtn.titleLabel setFont:[UIFont systemFontOfSize:12.f]];
  133. [clearBtn addTarget:self action:@selector(clearPasteInfo) forControlEvents:(UIControlEventTouchUpInside)];
  134. [clearBtn.layer setCornerRadius:4];
  135. [bgView addSubview:clearBtn];
  136. CGFloat w_clearBtn = 36.f;
  137. CGFloat h_clearBtn = 19.f;
  138. [clearBtn mas_makeConstraints:^(MASConstraintMaker *make){
  139. make.right.mas_equalTo(-w_left_right_btn);
  140. make.width.mas_equalTo(w_clearBtn);
  141. make.height.mas_equalTo(h_clearBtn);
  142. make.centerY.equalTo(tipsLabel.mas_centerY);
  143. }];
  144. noCententImageView = [[UIImageView alloc] init];
  145. [noCententImageView setBackgroundColor:[UIColor clearColor]];
  146. UIImage *noCententImage = [UIImage imageNamed:@"jianqiebankong_icon"];
  147. [bgView addSubview:noCententImageView];
  148. [noCententImageView mas_makeConstraints:^(MASConstraintMaker *make) {
  149. make.centerX.equalTo(self->bgView.mas_centerX);
  150. make.width.mas_equalTo(noCententImage.size.width);
  151. make.height.mas_equalTo(noCententImage.size.height);
  152. make.top.mas_equalTo(40.f);
  153. }];
  154. [noCententImageView setImage:noCententImage];
  155. [noCententImageView setHidden:YES];
  156. noCententLabel = [[UILabel alloc] init];
  157. [noCententLabel setBackgroundColor:[UIColor clearColor]];
  158. [noCententLabel setTextAlignment:(NSTextAlignmentCenter)];
  159. [noCententLabel setText:@"剪贴板为空"];
  160. [noCententLabel setFont:[UIFont systemFontOfSize:15.f]];
  161. [noCententLabel setTextColor:[UIColor whiteColor]];
  162. [bgView addSubview:noCententLabel];
  163. [noCententLabel mas_makeConstraints:^(MASConstraintMaker *make) {
  164. make.height.mas_equalTo(20.f);
  165. make.left.mas_equalTo(0);
  166. make.right.mas_equalTo(0);
  167. make.top.equalTo(noCententImageView.mas_bottom).offset(10.f);
  168. }];
  169. [noCententLabel setHidden:YES];
  170. /*添加列表*/
  171. [bgView addSubview:self.tableView];
  172. [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
  173. make.top.equalTo(tipsLabel.mas_bottom).offset(10.f);
  174. make.left.mas_equalTo(0);
  175. make.right.mas_equalTo(-10);
  176. make.bottom.mas_equalTo(-10);
  177. }];
  178. if (pasteDataAry && [pasteDataAry count] > 0){
  179. [self haveCentent:YES];
  180. [tipsLabel setHidden:NO];
  181. }else{
  182. [self haveCentent:NO];
  183. [tipsLabel setHidden:YES];
  184. }
  185. }
  186. - (void)clearPasteInfo{
  187. [self setHidden:YES];
  188. UIAlertController *alertController = [UIAlertController alertControllerWithTitle:nil
  189. message:@""
  190. preferredStyle:UIAlertControllerStyleAlert];
  191. NSString *tipsStr = @"确定清空剪贴板?";
  192. NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:tipsStr attributes:@{NSFontAttributeName: [UIFont systemFontOfSize: 15], NSForegroundColorAttributeName: HW333333Color}];
  193. [alertController setValue:string forKey:@"_attributedMessage"];
  194. UIView *subView1 = alertController.view.subviews[0];
  195. if (subView1 && [subView1 subviews]){
  196. UIView *subView2 = subView1.subviews[0];
  197. if (subView2 && [subView2 subviews]){
  198. UIView *subView3 = subView2.subviews[0];
  199. if (subView3 && [subView3 subviews]){
  200. UIView *subView4 = subView3.subviews[0];
  201. if (subView4 && [subView4 subviews]){
  202. UIView *subView5 = subView4.subviews[0];
  203. if (subView5 && [[subView5 subviews] count] > 1){
  204. UIView *msg = subView5.subviews[1];
  205. if ([msg isKindOfClass:[UILabel class]]){
  206. [(UILabel*)msg setTextAlignment:(NSTextAlignmentCenter)];
  207. }
  208. }
  209. }
  210. }
  211. }
  212. }
  213. UIAlertAction *sureAction = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
  214. [self->pasteDataAry removeAllObjects];
  215. UIPasteboard* pasteboard = [UIPasteboard generalPasteboard];
  216. NSString *str = [pasteboard string];
  217. if (str){
  218. [pasteboard setString:[@"CVLUSTERS_NOUSE_" stringByAppendingString:str]];
  219. }
  220. NSString* curSn = ksharedAppDelegate.DeviceThirdIdMod.data.changeSn;
  221. [HWDataManager setObjectWithKey:curSn value:self->pasteDataAry];
  222. [self.tableView reloadData];
  223. [self haveCentent:NO];
  224. [self setHidden:NO];
  225. }];
  226. UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
  227. [self setHidden:NO];
  228. }];
  229. [sureAction setValue:HW3370FFColor forKey:@"titleTextColor"];//iOS8.3
  230. [alertController addAction:sureAction];
  231. [cancelAction setValue:HW333333Color forKey:@"titleTextColor"];//iOS8.3
  232. [alertController addAction:cancelAction];
  233. // // 弹窗边框
  234. // UIView *subview = alertController.view.subviews.firstObject;
  235. // UIView *alertContentView = subview.subviews.firstObject;
  236. // alertContentView.layer.cornerRadius = 10;
  237. //// alertContentView.layer.shadowColor = HWFFFFFFColor.CGColor;
  238. // alertContentView.layer.shadowOffset = CGSizeMake(0,0);
  239. // alertContentView.layer.shadowOpacity = 1;
  240. // alertContentView.layer.shadowRadius = 7;
  241. // 弹窗背景颜色
  242. if (@available(iOS 13.0, *)) {
  243. alertController.overrideUserInterfaceStyle = UIUserInterfaceStyleLight;
  244. }
  245. [[UIApplication sharedApplication].keyWindow.rootViewController presentViewController:alertController animated:YES completion:nil];
  246. }
  247. - (void)pastedBtnPressed:(NSString*)centontStr{
  248. if ([delegate respondsToSelector:@selector(pastedBtnBePressed: pasteSelectView:)]){
  249. [delegate pastedBtnBePressed:centontStr pasteSelectView:self];
  250. }
  251. }
  252. /*
  253. // Only override drawRect: if you perform custom drawing.
  254. // An empty implementation adversely affects performance during animation.
  255. - (void)drawRect:(CGRect)rect {
  256. // Drawing code
  257. }
  258. */
  259. - (void)haveCentent:(BOOL)have{
  260. if (have){
  261. [tipsLabel setHidden:NO];
  262. [clearBtn setHidden:NO];
  263. [noCententImageView setHidden:YES];
  264. [noCententLabel setHidden:YES];
  265. [self.tableView setHidden:NO];
  266. }else{
  267. [tipsLabel setHidden:NO];
  268. [clearBtn setHidden:YES];
  269. [noCententImageView setHidden:NO];
  270. [noCententLabel setHidden:NO];
  271. [self.tableView setHidden:YES];
  272. }
  273. }
  274. #pragma mark - 列表委托
  275. - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
  276. if (pasteDataAry){
  277. return [pasteDataAry count];
  278. }
  279. return 0;
  280. }
  281. - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
  282. return 1;
  283. }
  284. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
  285. static NSString *identifier = @"UseInfoCell";
  286. NSInteger row = indexPath.section;
  287. UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
  288. cell.selectionStyle = UITableViewCellSelectionStyleNone;
  289. if (!cell){
  290. cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:identifier];
  291. [cell setSelectionStyle:UITableViewCellSelectionStyleDefault];
  292. [cell setBackgroundColor:[UIColor clearColor]];
  293. [cell setAccessoryType:(UITableViewCellAccessoryNone)];
  294. UILabel *contentLabel = [[UILabel alloc] init];
  295. [contentLabel setBackgroundColor:[UIColor whiteColor]];
  296. [contentLabel setTextColor:[UIColor hwColor:@"333333"]];
  297. [contentLabel setFont:[UIFont systemFontOfSize:12.f]];
  298. [contentLabel setClipsToBounds:YES];
  299. [contentLabel setTag:12345];
  300. [contentLabel.layer setCornerRadius:3.f];
  301. [cell.contentView addSubview:contentLabel];
  302. [cell.contentView.layer setCornerRadius:3.f];
  303. [cell.contentView setClipsToBounds:YES];
  304. [contentLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
  305. make.height.mas_equalTo(32.f);
  306. make.left.mas_equalTo(10.f);
  307. make.right.mas_equalTo(-0);
  308. make.top.mas_equalTo(0);
  309. }];
  310. }
  311. UILabel *label = [cell.contentView viewWithTag:12345];
  312. [label setText:[NSString stringWithFormat:@" %@",[pasteDataAry objectAtIndex:row]]];
  313. return cell;
  314. }
  315. - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
  316. [tableView deselectRowAtIndexPath:indexPath animated:YES];
  317. NSInteger row = [indexPath section];
  318. [self pastedBtnPressed:[pasteDataAry objectAtIndex:row]];
  319. }
  320. - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
  321. return 32.f;
  322. }
  323. - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
  324. return YES;
  325. }
  326. // 定义编辑样式
  327. - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
  328. return UITableViewCellEditingStyleDelete;
  329. }
  330. // 进入编辑模式,按下出现的编辑按钮后,进行删除操作
  331. - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
  332. if (editingStyle == UITableViewCellEditingStyleDelete) {
  333. [pasteDataAry removeObjectAtIndex:indexPath.section];
  334. UIPasteboard* pasteboard = [UIPasteboard generalPasteboard];
  335. NSString *str = [pasteboard string];
  336. if (str){
  337. [pasteboard setString:[@"CVLUSTERS_NOUSE_" stringByAppendingString:str]];
  338. }
  339. NSString* curSn = ksharedAppDelegate.DeviceThirdIdMod.data.changeSn;
  340. [HWDataManager setObjectWithKey:curSn value:pasteDataAry];
  341. [self.tableView reloadData];
  342. if ([pasteDataAry count] == 0){
  343. [self haveCentent:NO];
  344. }
  345. }
  346. }
  347. // 修改编辑按钮文字
  348. - (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath{
  349. return @"删除";
  350. }
  351. - (UIView*)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section{
  352. return [UIView new];
  353. }
  354. - (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
  355. return 8.f;
  356. }
  357. @end