CDocumentPasswordViewController.m 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. //
  2. // CDocumentPasswordViewController.m
  3. // ComPDFKit_Tools
  4. //
  5. // Copyright © 2014-2024 PDF Technologies, Inc. All Rights Reserved.
  6. //
  7. // THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW
  8. // AND MAY NOT BE RESOLD OR REDISTRIBUTED. USAGE IS BOUND TO THE ComPDFKit LICENSE AGREEMENT.
  9. // UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
  10. // This notice may not be removed from this file.
  11. //
  12. #import "CDocumentPasswordViewController.h"
  13. #import "CPDFColorUtils.h"
  14. #import <ComPDFKit/ComPDFKit.h>
  15. @interface CDocumentPasswordViewController () <UITextFieldDelegate>
  16. @property (nonatomic, strong) UIButton *backBtn;
  17. @property (nonatomic, strong) UIImageView *passwordImageView;
  18. @property (nonatomic, strong) UILabel *titleLablel;
  19. @property (nonatomic, strong) UIView *enterView;
  20. @property (nonatomic, strong) UILabel *passLabel;
  21. @property (nonatomic, strong) UIView *splitVidew;
  22. @property (nonatomic, strong) UITextField *enterTextField;
  23. @property (nonatomic, strong) UILabel *warningLabel;
  24. @property (nonatomic, strong) UIButton *OKBtn;
  25. @property (nonatomic, strong) CPDFDocument *document;
  26. @property (nonatomic, strong) UIButton *clearButton;
  27. @end
  28. @implementation CDocumentPasswordViewController
  29. #pragma mark - Initializers
  30. - (instancetype)initWithDocument:(CPDFDocument *)document {
  31. if (self = [super init]) {
  32. self.document = document;
  33. }
  34. return self;
  35. }
  36. #pragma mark - UIViewController Methods
  37. - (void)viewDidLoad {
  38. [super viewDidLoad];
  39. // Do any additional setup after loading the view.
  40. self.backBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  41. [self.backBtn setImage:[UIImage imageNamed:@"CDocumentPasswordImageBack" inBundle:[NSBundle bundleForClass:self.class] compatibleWithTraitCollection:nil] forState:UIControlStateNormal];
  42. [self.backBtn addTarget:self action:@selector(buttonItemClicked_back:) forControlEvents:UIControlEventTouchUpInside];
  43. [self.view addSubview:self.backBtn];
  44. self.passwordImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"CDocumentPasswordImagePassword" inBundle:[NSBundle bundleForClass:self.class] compatibleWithTraitCollection:nil]];
  45. [self.view addSubview:self.passwordImageView];
  46. self.titleLablel = [[UILabel alloc] init];
  47. self.titleLablel.text = NSLocalizedString(@"Please Enter The Password", nil);
  48. self.titleLablel.adjustsFontSizeToFitWidth = YES;
  49. [self.view addSubview:self.titleLablel];
  50. self.enterView = [[UIView alloc] init];
  51. [self.view addSubview:self.enterView];
  52. [self initEnterView];
  53. self.warningLabel = [[UILabel alloc] init];
  54. self.warningLabel.text = NSLocalizedString(@"Wrong Password", nil);
  55. self.warningLabel.textColor = [UIColor redColor];
  56. [self.view addSubview:self.warningLabel];
  57. self.warningLabel.hidden = YES;
  58. self.OKBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  59. [self.OKBtn setTitle:NSLocalizedString(@"Done", nil) forState:UIControlStateNormal];
  60. [self.OKBtn addTarget:self action:@selector(buttonItemClicked_ok:) forControlEvents:UIControlEventTouchUpInside];
  61. [self.OKBtn setTitleColor:[UIColor colorWithRed:255.0/255.0 green:255.0/255.0 blue:255.0/255.0 alpha:1.0] forState:UIControlStateNormal];
  62. self.OKBtn.backgroundColor = [UIColor colorWithRed:221.0/255.0 green:233.0/255.0 blue:255.0/255.0 alpha:1.0];
  63. [self.view addSubview:self.OKBtn];
  64. self.view.backgroundColor = [CPDFColorUtils CPDFViewControllerBackgroundColor];
  65. }
  66. - (void)viewWillLayoutSubviews {
  67. if (@available(iOS 11.0, *)) {
  68. self.backBtn.frame = CGRectMake(self.view.frame.size.width - self.view.safeAreaInsets.right - 70, self.view.safeAreaInsets.top, 50, 50);
  69. self.passwordImageView.frame = CGRectMake((self.view.frame.size.width - 100)/2, CGRectGetMaxY(self.backBtn.frame), 100, 100);
  70. self.titleLablel.frame = CGRectMake((self.view.frame.size.width - 200)/2, CGRectGetMaxY(self.passwordImageView.frame), 200, 50);
  71. self.enterView.frame = CGRectMake((self.view.frame.size.width - 300)/2, CGRectGetMaxY(self.titleLablel.frame), 300, 60);
  72. self.warningLabel.frame = CGRectMake((self.view.frame.size.width - 300)/2, CGRectGetMaxY(self.enterView.frame), 300, 40);
  73. self.OKBtn.frame = CGRectMake((self.view.frame.size.width - 300)/2, CGRectGetMaxY(self.warningLabel.frame), 300, 60);
  74. } else {
  75. self.backBtn.frame = CGRectMake(self.view.frame.size.width - 60, 65, 50, 50);
  76. self.passwordImageView.frame = CGRectMake((self.view.frame.size.width - 100)/2, CGRectGetMaxY(self.backBtn.frame), 100, 100);
  77. self.titleLablel.frame = CGRectMake((self.view.frame.size.width - 100)/2, CGRectGetMaxY(self.passwordImageView.frame), 200, 50);
  78. self.enterView.frame = CGRectMake((self.view.frame.size.width - 300)/2, CGRectGetMaxY( self.titleLablel.frame), 300, 60);
  79. self.warningLabel.frame = CGRectMake((self.view.frame.size.width - 300)/2, CGRectGetMaxY(self.enterView.frame), 300, 40);
  80. self.OKBtn.frame = CGRectMake((self.view.frame.size.width - 300)/2, CGRectGetMaxY(self.warningLabel.frame), 300, 60);
  81. }
  82. self.passLabel.frame = CGRectMake(0, 0, 80, self.enterView.frame.size.height-1);
  83. self.enterTextField.frame = CGRectMake(80, 0, self.enterView.frame.size.width-80, self.enterView.frame.size.height-1);
  84. self.splitVidew.frame = CGRectMake(0, self.enterView.frame.size.height-1, self.enterView.frame.size.width, 1);
  85. self.clearButton.frame = CGRectMake(self.enterView.frame.size.width-30, (self.enterView.frame.size.height-24)/2, 24, 24);
  86. }
  87. #pragma mark - Private Methods
  88. - (void)initEnterView {
  89. self.passLabel = [[UILabel alloc] init];
  90. self.passLabel.text = NSLocalizedString(@"Password", nil);
  91. [self.enterView addSubview:self.passLabel];
  92. self.enterTextField = [[UITextField alloc] init];
  93. self.enterTextField.borderStyle = UITextBorderStyleNone;
  94. self.enterTextField.secureTextEntry = YES;
  95. self.enterTextField.delegate = self;
  96. self.enterTextField.font = [UIFont systemFontOfSize:13];
  97. self.enterTextField.returnKeyType = UIReturnKeyDone;
  98. self.enterTextField.leftView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 8, 0)];
  99. self.enterTextField.leftViewMode = UITextFieldViewModeAlways;
  100. self.enterTextField.rightView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 8, 0)];
  101. self.enterTextField.rightViewMode = UITextFieldViewModeAlways;
  102. self.enterTextField.placeholder = NSLocalizedString(@"Please enter the password", nil);
  103. [self.enterTextField becomeFirstResponder];
  104. [self.enterTextField addTarget:self action:@selector(textField_change:) forControlEvents:UIControlEventEditingChanged];
  105. [self.enterView addSubview:self.enterTextField];
  106. self.clearButton = [UIButton buttonWithType:UIButtonTypeCustom];
  107. self.clearButton.layer.cornerRadius = 12;
  108. self.clearButton.layer.masksToBounds = YES;
  109. [self.clearButton setImage:[UIImage imageNamed:@"CDocumentPasswordImageClear" inBundle:[NSBundle bundleForClass:self.class] compatibleWithTraitCollection:nil] forState:UIControlStateNormal];
  110. [self.clearButton addTarget:self action:@selector(buttonItemClicked_clear:) forControlEvents:UIControlEventTouchUpInside];
  111. [self.enterView addSubview:self.clearButton];
  112. self.clearButton.hidden = YES;
  113. self.splitVidew = [[UIView alloc] init];
  114. self.splitVidew.backgroundColor = [CPDFColorUtils CTableviewCellSplitColor];
  115. [self.enterView addSubview:self.splitVidew];
  116. }
  117. #pragma mark - Action
  118. - (void)buttonItemClicked_back:(UIButton *)button {
  119. [self dismissViewControllerAnimated:YES completion:^{
  120. if (self.delegate && [self.delegate respondsToSelector:@selector(documentPasswordViewControllerCancel:)]) {
  121. [self.delegate documentPasswordViewControllerCancel:self];
  122. }
  123. }];
  124. }
  125. - (void)buttonItemClicked_ok:(UIButton *)button {
  126. if ([self.document unlockWithPassword:self.enterTextField.text]) {
  127. [self dismissViewControllerAnimated:YES completion:^{
  128. if (self.delegate && [self.delegate respondsToSelector:@selector(documentPasswordViewControllerOpen:document:)]) {
  129. [self.delegate documentPasswordViewControllerOpen:self document:self.document];
  130. }
  131. }];
  132. } else {
  133. self.warningLabel.hidden = NO;
  134. }
  135. }
  136. - (void)buttonItemClicked_clear:(UIButton *)button {
  137. self.OKBtn.backgroundColor = [UIColor colorWithRed:221.0/255.0 green:233.0/255.0 blue:255.0/255.0 alpha:1.0];
  138. self.warningLabel.hidden = YES;
  139. self.enterTextField.text = @"";
  140. self.clearButton.hidden = YES;
  141. }
  142. - (void)textField_change:(UITextField *)sender {
  143. if ([sender.text length] == 0) {
  144. self.OKBtn.backgroundColor = [UIColor colorWithRed:221.0/255.0 green:233.0/255.0 blue:255.0/255.0 alpha:1.0];
  145. self.warningLabel.hidden = YES;
  146. self.clearButton.hidden = YES;
  147. } else {
  148. self.OKBtn.backgroundColor = [UIColor blueColor];
  149. self.clearButton.hidden = NO;
  150. }
  151. }
  152. #pragma mark - UITextFieldDelegate
  153. - (BOOL)textFieldShouldReturn:(UITextField *)textField {
  154. [textField resignFirstResponder];
  155. return YES;
  156. }
  157. - (BOOL)textFieldShouldClear:(UITextField *)textField {
  158. self.OKBtn.backgroundColor = [UIColor colorWithRed:221.0/255.0 green:233.0/255.0 blue:255.0/255.0 alpha:1.0];
  159. self.warningLabel.hidden = YES;
  160. return YES;
  161. }
  162. @end