Преглед изворни кода

PDFTools(iOS) - 编辑模式内容完善

chenyu пре 1 година
родитељ
комит
c7bbeb4580

+ 6 - 0
compdfkit-tools/compdfkit-tools.xcodeproj/project.pbxproj

@@ -28,6 +28,7 @@
 		4F5986922A03411700F06A1B /* CPDFDropDownMenu.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F5986902A03411700F06A1B /* CPDFDropDownMenu.m */; };
 		4F6C796A29FBD532008C9501 /* CPDFEditFontNameSelectView.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F6C796829FBD532008C9501 /* CPDFEditFontNameSelectView.h */; };
 		4F6C796B29FBD532008C9501 /* CPDFEditFontNameSelectView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F6C796929FBD532008C9501 /* CPDFEditFontNameSelectView.m */; };
+		4FF3E1D12A064A8200C14F91 /* CPDFListView+Edit.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FF3E1CF2A064A8100C14F91 /* CPDFListView+Edit.m */; };
 		C918CE8129F621E200D43974 /* CPDFColorPickerView.h in Headers */ = {isa = PBXBuildFile; fileRef = C918CE7F29F621E200D43974 /* CPDFColorPickerView.h */; };
 		C918CE8229F621E200D43974 /* CPDFColorPickerView.m in Sources */ = {isa = PBXBuildFile; fileRef = C918CE8029F621E200D43974 /* CPDFColorPickerView.m */; };
 		C918CE8429F62D6F00D43974 /* Image.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C918CE8329F62D6F00D43974 /* Image.xcassets */; };
@@ -201,6 +202,8 @@
 		4F5986902A03411700F06A1B /* CPDFDropDownMenu.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CPDFDropDownMenu.m; sourceTree = "<group>"; };
 		4F6C796829FBD532008C9501 /* CPDFEditFontNameSelectView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CPDFEditFontNameSelectView.h; sourceTree = "<group>"; };
 		4F6C796929FBD532008C9501 /* CPDFEditFontNameSelectView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CPDFEditFontNameSelectView.m; sourceTree = "<group>"; };
+		4FF3E1CF2A064A8100C14F91 /* CPDFListView+Edit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "CPDFListView+Edit.m"; sourceTree = "<group>"; };
+		4FF3E1D02A064A8100C14F91 /* CPDFListView+Edit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "CPDFListView+Edit.h"; sourceTree = "<group>"; };
 		C918CE7F29F621E200D43974 /* CPDFColorPickerView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CPDFColorPickerView.h; sourceTree = "<group>"; };
 		C918CE8029F621E200D43974 /* CPDFColorPickerView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CPDFColorPickerView.m; sourceTree = "<group>"; };
 		C918CE8329F62D6F00D43974 /* Image.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Image.xcassets; sourceTree = "<group>"; };
@@ -888,6 +891,8 @@
 				F38F5B5E2A0344EA00D0EEFD /* CPDFListView+Annotation.h */,
 				F38F5B5F2A0344EA00D0EEFD /* CPDFListView+Annotation.m */,
 				F38F5B622A038B0400D0EEFD /* CPDFListView+Private.h */,
+				4FF3E1D02A064A8100C14F91 /* CPDFListView+Edit.h */,
+				4FF3E1CF2A064A8100C14F91 /* CPDFListView+Edit.m */,
 			);
 			path = PDFListView;
 			sourceTree = "<group>";
@@ -1078,6 +1083,7 @@
 			buildActionMask = 2147483647;
 			files = (
 				F32DA17B29ED904300E19ECA /* CPDFDisplayViewController.m in Sources */,
+				4FF3E1D12A064A8200C14F91 /* CPDFListView+Edit.m in Sources */,
 				C91BE7CA2A0347770038F2BC /* CPDFFontStyleTableView.m in Sources */,
 				C918CE9329F7C3FB00D43974 /* CAnnotationManage.m in Sources */,
 				C918CEC029F9078A00D43974 /* CPDFNoteOpenViewController.m in Sources */,

+ 1 - 4
Edit-Ctrl-Demo/Edit-Ctrl-Demo/CPDFListView+Event.h

@@ -27,11 +27,8 @@
 @end
 
 
-@interface CPDFListView (Event)<UINavigationControllerDelegate,UIImagePickerControllerDelegate>
+@interface CPDFListView (Edit)<UINavigationControllerDelegate,UIImagePickerControllerDelegate>
 
-@property(nonatomic,assign)CGPoint mPoint;
-
-@property(nonatomic,strong)CPDFPage * mPage;
 
 @end
 

+ 81 - 89
Edit-Ctrl-Demo/Edit-Ctrl-Demo/CPDFListView+Event.m

@@ -8,54 +8,18 @@
 //  Please see License for details. This notice may not be removed from this file.
 //
 
-#import "PDFListView+Event.h"
-#import <objc/runtime.h>
+#import "CPDFListView+Edit.h"
+#import "CPDFListView+Private.h"
 
-
-static NSString *pointKey  = @"pointKey";
-static NSString *pageKey  = @"pageKey";
-
-
-@implementation PDFListView (Event)
-
-- (void)setMPage:(CPDFPage *)mPage{
-    NSValue *value = [NSValue value:&mPage withObjCType:@encode(CGPoint)];
-    objc_setAssociatedObject(self,&pageKey, value, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
-}
-
-- (CPDFPage *)mPage{
-    NSValue *value = objc_getAssociatedObject(self, &pageKey);
-    if(value) {
-        CPDFPage *page;
-        [value getValue:&page];
-        return page;
-    }else {
-        return nil;
-    }
-}
-
-- (void)setMPoint:(CGPoint)mPoint{
-    NSValue *value = [NSValue value:&mPoint withObjCType:@encode(CGPoint)];
-    objc_setAssociatedObject(self,&pointKey, value, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
-}
-
-- (CGPoint)mPoint{
-    NSValue *value = objc_getAssociatedObject(self, &pointKey);
-    if(value) {
-        CGPoint point;
-        [value getValue:&point];
-        return point;
-    }else {
-        return CGPointZero;
-    }
-}
+@implementation CPDFListView (Edit)
  
 
 - (NSArray<UIMenuItem *> *)menuItemsEditingAtPoint:(CGPoint)point forPage:(CPDFPage *)page{
+    
     NSArray *menuItem = [super menuItemsEditingAtPoint:point forPage:page];
     
-    self.mPoint= point;
-    self.mPage = page;
+    self.menuPoint = point;
+    self.menuPage = page;
 
     NSMutableArray *menuItems =[NSMutableArray array];
     if (menuItem) {
@@ -68,56 +32,82 @@ static NSString *pageKey  = @"pageKey";
     }
     
     if(self.editStatus == CEditingSelectStateEmpty){
-        UIMenuItem *addTextItem = [[[UIMenuItem alloc] initWithTitle:NSLocalizedString(@"Add Text", nil)
-                                                              action:@selector(addTextEditingItemAction:)] autorelease];
-        UIMenuItem *addImageItem = [[[UIMenuItem alloc] initWithTitle:NSLocalizedString(@"Add Image", nil)
-                                                               action:@selector(addImageEditingItemAction:)] autorelease];
+        UIMenuItem *addTextItem = [[UIMenuItem alloc] initWithTitle:NSLocalizedString(@"Add Text", nil)
+                                                              action:@selector(addTextEditingItemAction:)];
+        UIMenuItem *addImageItem = [[UIMenuItem alloc] initWithTitle:NSLocalizedString(@"Add Image", nil)
+                                                               action:@selector(addImageEditingItemAction:)];
         [menuItems addObject:addImageItem];
         [menuItems addObject:addTextItem];
     }
     
     if(isCropMode){
-        UIMenuItem * doneItem = [[[UIMenuItem alloc] initWithTitle:NSLocalizedString(@"Done", nil) action:@selector(doneActionClick:)] autorelease];
-        UIMenuItem * cancelItem = [[[UIMenuItem alloc] initWithTitle:NSLocalizedString(@"Cancel", nil) action:@selector(cancelActionClick:)] autorelease];
+        UIMenuItem * doneItem = [[UIMenuItem alloc] initWithTitle:NSLocalizedString(@"Done", nil) action:@selector(doneActionClick:)];
+        UIMenuItem * cancelItem = [[UIMenuItem alloc] initWithTitle:NSLocalizedString(@"Cancel", nil) action:@selector(cancelActionClick:)];
         
         [menuItems addObject:doneItem];
         [menuItems addObject:cancelItem];
     }else{
         if(self.editingArea){
             if (self.editingArea.IsImageArea) {
-                UIMenuItem * cropItem = [[[UIMenuItem alloc] initWithTitle:NSLocalizedString(@"Crop", nil) action:@selector(enterCropActionClick:)] autorelease];
-                UIMenuItem * rotateItem = [[[UIMenuItem alloc] initWithTitle:NSLocalizedString(@"Rotate", nil) action:@selector(rotateActionClick:)] autorelease];
-                UIMenuItem * hMirrorItem = [[[UIMenuItem alloc] initWithTitle:NSLocalizedString(@"HMirror", nil) action:@selector(horizontalMirrorClick:)] autorelease];
-                UIMenuItem * vMirrorItem = [[[UIMenuItem alloc] initWithTitle:NSLocalizedString(@"VMirror", nil) action:@selector(verticalMirrorClick:)] autorelease];
-                UIMenuItem * rPlaceItem  = [[[UIMenuItem alloc] initWithTitle:NSLocalizedString(@"Replace", nil) action:@selector(replaceActionClick:)] autorelease];
                 
-                UIMenuItem * extractItem  = [[[UIMenuItem alloc] initWithTitle:NSLocalizedString(@"Extract", nil) action:@selector(extractActionClick:)] autorelease];
+                UIMenuItem * leftRotateItem = [[UIMenuItem alloc] initWithTitle:NSLocalizedString(@"Left Rotate", nil) action:@selector(leftRotateCropActionClick:)];
                 
-                UIMenuItem * opacityItem  = [[[UIMenuItem alloc] initWithTitle:NSLocalizedString(@"Opacity", nil) action:@selector(opacityEditingItemAction:)] autorelease];
+                UIMenuItem * rightRotateItem = [[UIMenuItem alloc] initWithTitle:NSLocalizedString(@"Right Rotate", nil) action:@selector(leftRotateCropActionClick:)];
                 
-                [menuItems addObject:cropItem];
+                UIMenuItem * rPlaceItem  = [[UIMenuItem alloc] initWithTitle:NSLocalizedString(@"Replace", nil) action:@selector(replaceActionClick:)];
+                
+                UIMenuItem * cropItem = [[UIMenuItem alloc] initWithTitle:NSLocalizedString(@"Crop", nil) action:@selector(enterCropActionClick:)];
+                
+                UIMenuItem * opacityItem  = [[UIMenuItem alloc] initWithTitle:NSLocalizedString(@"Opacity", nil) action:@selector(opacityEditingItemAction:)];
+                
+                UIMenuItem * rotateItem = [[UIMenuItem alloc] initWithTitle:NSLocalizedString(@"Rotate", nil) action:@selector(rotateActionClick:)];
+                UIMenuItem * hMirrorItem = [[UIMenuItem alloc] initWithTitle:NSLocalizedString(@"HMirror", nil) action:@selector(horizontalMirrorClick:)];
+                UIMenuItem * vMirrorItem = [[UIMenuItem alloc] initWithTitle:NSLocalizedString(@"VMirror", nil) action:@selector(verticalMirrorClick:)];
+                
+                UIMenuItem * extractItem  = [[UIMenuItem alloc] initWithTitle:NSLocalizedString(@"Extract", nil) action:@selector(extractActionClick:)];
+                
+                
+                
+                [menuItems addObject:leftRotateItem];
+                [menuItems addObject:rightRotateItem];
+                [menuItems addObject:rPlaceItem];
                 [menuItems addObject:rotateItem];
+                [menuItems addObject:cropItem];
+                [menuItems addObject:opacityItem];
+
                 [menuItems addObject:hMirrorItem];
                 [menuItems addObject:vMirrorItem];
-                [menuItems addObject:rPlaceItem];
                 [menuItems addObject:extractItem];
-                [menuItems addObject:opacityItem];
             }else{
-                UIMenuItem * opacityItem  = [[[UIMenuItem alloc] initWithTitle:NSLocalizedString(@"Opacity", nil) action:@selector(opacityEditingItemAction:)] autorelease];
+                
+                UIMenuItem * propertyItem  = [[UIMenuItem alloc] initWithTitle:NSLocalizedString(@"Property", nil) action:@selector(propertyEditingItemAction:)];
+                
+                UIMenuItem * opacityItem  = [[UIMenuItem alloc] initWithTitle:NSLocalizedString(@"Opacity", nil) action:@selector(opacityEditingItemAction:)];
+                
+                [menuItems addObject:propertyItem];
                 [menuItems addObject:opacityItem];
             }
         }
     }
     
-    
+    if([self.performDelegate respondsToSelector:@selector(PDFListView:customizeMenuForPage:forPagePoint:)])
+        return [self.performDelegate PDFListView:self customizeMenuForPage:page forPagePoint:point];
     return menuItems;
 }
 
+- (void)leftRotateCropActionClick:(UIMenuItem*)menuItem {
+    [self rotateEditArea:self.editingArea rotateAngle:-90];
+}
+
+- (void)rightRotateCropActionClick:(UIMenuItem*)menuItem {
+    [self rotateEditArea:self.editingArea rotateAngle:90];
+}
+
 - (void)addTextEditingItemAction:(UIMenuItem*)menuItem{
-    CPDFPage *page = self.mPage;
-    NSMutableParagraphStyle *style = [[[NSMutableParagraphStyle alloc] init] autorelease];
+    CPDFPage *page = self.menuPage;
+    NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
     [style setAlignment:NSTextAlignmentCenter];
-    CGRect rect = CGRectMake(self.mPoint.x, self.mPoint.y, 60.0, 20);
+    CGRect rect = CGRectMake(self.menuPoint.x, self.menuPoint.y, 60.0, 20);
     
     NSMutableDictionary *dic = [NSMutableDictionary dictionary];
     [dic setValue:style forKey:NSParagraphStyleAttributeName];
@@ -128,7 +118,6 @@ static NSString *pageKey  = @"pageKey";
 }
 - (void)addImageEditingItemAction:(UIMenuItem*)menuItem{
     
-//    [self setShouAddEditAreaType:CAddEditingAreaTypeImage];
     UIImagePickerController * imagePicker = [[UIImagePickerController alloc] init];
     imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
     imagePicker.delegate = self;
@@ -137,12 +126,12 @@ static NSString *pageKey  = @"pageKey";
 
 - (void)doneActionClick:(UIMenuItem*)menuItem{
     CPDFEditImageArea * editArea = (CPDFEditImageArea *)self.editingArea;
-    [self cropEditImageArea:editArea withBounds:editArea.cropRect];
-    [self exitCropWithEditImageArea:editArea];
+    [self cropEditArea:self.editingArea WithRect:editArea.cropRect];
+    [self endCropEditArea:self.editingArea];
 }
 
 - (void)cancelActionClick:(UIMenuItem*)menuItem{
-    [self exitCropWithEditImageArea:(CPDFEditImageArea *)self.editingArea];
+    [self endCropEditArea:self.editingArea];
 }
 
 - (void)deleteActionClick:(UIMenuItem*)menuItem{
@@ -156,16 +145,22 @@ static NSString *pageKey  = @"pageKey";
     [self.window.rootViewController presentViewController:imagePicker animated:YES completion:nil];
 }
 
+- (void)propertyEditingItemAction:(UIMenuItem*)menuItem {
+    if(self.performDelegate && [self.performDelegate respondsToSelector:@selector(PDFViewCustomMenuClick:identifier:)]){
+        [self.performDelegate PDFViewCustomMenuClick:self identifier:@"PropertyItem"];
+    }
+}
+
 - (void)opacityEditingItemAction:(UIMenuItem*)menuItem{
     NSMutableArray *menuItems = [NSMutableArray array];
-    UIMenuItem *opacity25Item = [[[UIMenuItem alloc] initWithTitle:NSLocalizedString(@"25%", nil)
-                                                            action:@selector(opacity25ItemAction:)] autorelease];
-    UIMenuItem *opacity50Item = [[[UIMenuItem alloc] initWithTitle:NSLocalizedString(@"50%", nil)
-                                                            action:@selector(opacity50ItemAction:)] autorelease];
-    UIMenuItem *opacity75Item = [[[UIMenuItem alloc] initWithTitle:NSLocalizedString(@"75%", nil)
-                                                            action:@selector(opacity75ItemAction:)] autorelease];
-    UIMenuItem *opacity100Item = [[[UIMenuItem alloc] initWithTitle:NSLocalizedString(@"100%", nil)
-                                                             action:@selector(opacity100ItemAction:)] autorelease];
+    UIMenuItem *opacity25Item = [[UIMenuItem alloc] initWithTitle:NSLocalizedString(@"25%", nil)
+                                                            action:@selector(opacity25ItemAction:)];
+    UIMenuItem *opacity50Item = [[UIMenuItem alloc] initWithTitle:NSLocalizedString(@"50%", nil)
+                                                            action:@selector(opacity50ItemAction:)];
+    UIMenuItem *opacity75Item = [[UIMenuItem alloc] initWithTitle:NSLocalizedString(@"75%", nil)
+                                                            action:@selector(opacity75ItemAction:)];
+    UIMenuItem *opacity100Item = [[UIMenuItem alloc] initWithTitle:NSLocalizedString(@"100%", nil)
+                                                             action:@selector(opacity100ItemAction:)];
     [menuItems addObject:opacity25Item];
     [menuItems addObject:opacity50Item];
     [menuItems addObject:opacity75Item];
@@ -182,19 +177,19 @@ static NSString *pageKey  = @"pageKey";
 }
 
 - (void)opacity25ItemAction:(id)sender {
-    [self setOpacityEditArea:self.editingArea opacity:0.25];
+    [self setCharsFontTransparency:0.25];
 }
 
 - (void)opacity50ItemAction:(id)sender {
-    [self setOpacityEditArea:self.editingArea opacity:0.5];
+    [self setCharsFontTransparency:0.5];
 }
 
 - (void)opacity75ItemAction:(id)sender {
-    [self setOpacityEditArea:self.editingArea opacity:0.75];
+    [self setCharsFontTransparency:0.75];
 }
 
 - (void)opacity100ItemAction:(id)sender {
-    [self setOpacityEditArea:self.editingArea opacity:1.0];
+    [self setCharsFontTransparency:1.0];
 }
 
 #pragma mark - imagePickerDelegate
@@ -229,8 +224,8 @@ static NSString *pageKey  = @"pageKey";
             scaled_height =  img_height*scaled;
             scaled_width =  img_width*scaled;
 
-            CGRect rect = CGRectMake(self.mPoint.x, self.mPoint.y, scaled_width, scaled_height);
-            [self createEmptyImage:rect page:self.mPage path:url.path];
+            CGRect rect = CGRectMake(self.menuPoint.x, self.menuPoint.y, scaled_width, scaled_height);
+            [self createEmptyImage:rect page:self.menuPage path:url.path];
         }else{
             [self replaceEditImageArea:(CPDFEditImageArea *)self.editingArea imagePath:url.path];
         }
@@ -259,8 +254,8 @@ static NSString *pageKey  = @"pageKey";
             }
             scaled_height =  scaled_width*img_height/img_width;
             
-            CGRect rect = CGRectMake(self.mPoint.x, self.mPoint.y, scaled_width, scaled_height);
-            [self createEmptyImage:rect page:self.mPage path:url.path];
+            CGRect rect = CGRectMake(self.menuPoint.x, self.menuPoint.y, scaled_width, scaled_height);
+            [self createEmptyImage:rect page:self.menuPage path:url.path];
         }else{
             [self replaceEditImageArea:(CPDFEditImageArea *)self.editingArea imagePath:url.path];
         }
@@ -277,19 +272,16 @@ static NSString *pageKey  = @"pageKey";
 }
 
 - (void)horizontalMirrorClick:(UIMenuItem*)menuItem{
-    [self horizontalMirrorWithEditImageArea:(CPDFEditImageArea*)self.editingArea];
+    [self horizontalMirrorEditArea:(CPDFEditImageArea*)self.editingArea];
 }
 
 - (void)verticalMirrorClick:(UIMenuItem*)menuItem{
-    [self verticalMirrorWithEditImageArea:(CPDFEditImageArea*)self.editingArea];
+    [self verticalMirrorEditArea:(CPDFEditImageArea*)self.editingArea];
 }
 
-- (void)rotateActionClick:(UIMenuItem*)menuItem{
-    [self rotateWithEditImageArea:(CPDFEditImageArea*)self.editingArea rotate:90];
-}
 
 - (void)enterCropActionClick:(UIMenuItem*)menuItem{
-    [self enterCropWithEditImageArea:(CPDFEditImageArea*)self.editingArea];
+    [self beginCropEditArea:(CPDFEditImageArea*)self.editingArea];
 }
 
 @end

+ 1 - 0
compdfkit-tools/compdfkit-tools/Edit/CPDFEditCell/CPDFTextPropertyCell.m

@@ -53,6 +53,7 @@
         self.opacityView.titleLabel.text = NSLocalizedString(@"Font Size:", nil);
         self.opacityView.startLabel.text = @"0";
         self.opacityView.endLabel.text = @"100";
+        self.opacityView.opacitySlider.value = 0.14;
         self.opacityView.delegate = self;
         [self.sliderArea addSubview:self.opacityView];
     }

+ 2 - 0
compdfkit-tools/compdfkit-tools/Edit/CPDFEditToolBar/CPDFEditToolBar.h

@@ -38,5 +38,7 @@ NS_ASSUME_NONNULL_BEGIN
 
 - (instancetype)initWithPDFView:(CPDFView *)pdfView;
 
+- (void)updateButtonState;
+
 @end
 NS_ASSUME_NONNULL_END

+ 36 - 5
compdfkit-tools/compdfkit-tools/Edit/CPDFEditToolBar/CPDFEditToolBar.m

@@ -72,12 +72,12 @@
     [self.leftView addSubview:self.textEditButton];
     [self.leftView addSubview:self.imageEditButton];
     self.leftView.autoresizingMask = UIViewAutoresizingFlexibleWidth;
-
+    
     self.propertyButton = [UIButton buttonWithType:UIButtonTypeCustom];
     [self.propertyButton setBackgroundImage:[UIImage imageNamed:@"CPDFEditUnorderedList" inBundle:[NSBundle bundleForClass:self.class] compatibleWithTraitCollection:nil] forState:UIControlStateNormal];
     self.propertyButton.frame = CGRectMake(20, 20, 20, 20);
     [self.propertyButton addTarget:self action:@selector(propertyAction:) forControlEvents:UIControlEventTouchUpInside];
-
+    
     self.undoButton = [UIButton buttonWithType:UIButtonTypeCustom];
     self.undoButton.frame = CGRectMake(CGRectGetMaxX(self.propertyButton.frame) + 25, 20, 20, 20);
     [self.undoButton addTarget:self action:@selector(undoAction:) forControlEvents:UIControlEventTouchUpInside];
@@ -88,9 +88,9 @@
     self.redoButton = [UIButton buttonWithType:UIButtonTypeCustom];
     self.redoButton.frame = CGRectMake(CGRectGetMaxX(self.undoButton.frame) + 25, 20,20, 20);
     [self.redoButton addTarget:self action:@selector(redoAction:) forControlEvents:UIControlEventTouchUpInside];
-     [self.redoButton setBackgroundImage:[UIImage imageNamed:@"CPDFEditRedo" inBundle:[NSBundle bundleForClass:self.class] compatibleWithTraitCollection:nil] forState:UIControlStateNormal];
+    [self.redoButton setBackgroundImage:[UIImage imageNamed:@"CPDFEditRedo" inBundle:[NSBundle bundleForClass:self.class] compatibleWithTraitCollection:nil] forState:UIControlStateNormal];
     [self.redoButton setBackgroundImage:[UIImage imageNamed:@"CPDFEditRedoDisable" inBundle:[NSBundle bundleForClass:self.class] compatibleWithTraitCollection:nil] forState:UIControlStateDisabled];
-
+    
     self.rightView = [[UIView alloc]initWithFrame:CGRectMake(CGRectGetMaxX(self.leftView.frame), 0, 160, 60)];
     self.rightView.backgroundColor = [UIColor whiteColor];
     [self addSubview:self.self.rightView];
@@ -98,7 +98,7 @@
     [self.rightView addSubview:self.redoButton];
     [self.rightView addSubview:self.undoButton];
     [self.rightView addSubview:self.propertyButton];
-
+    
 }
 
 
@@ -164,4 +164,35 @@
     }
 }
 
+
+- (void)updateButtonState {
+    if (self.pdfView.editingArea.IsTextArea && (self.pdfView.editStatus == CEditingSelectStateEditSelectText ||
+        self.pdfView.editStatus == CEditingSelectStateEditTextArea)) {
+        //Text
+        [self.textEditButton setSelected:YES];
+        [self.imageEditButton setSelected:NO];
+    } else {
+        [self.textEditButton setSelected:NO];
+        [self.imageEditButton setSelected:YES];
+    }
+    
+    if(self.pdfView.editStatus == CEditingSelectStateEmpty){
+        self.propertyButton.enabled = NO;
+        [self.textEditButton setSelected:NO];
+        [self.imageEditButton setSelected:NO];
+    }else{
+        self.propertyButton.enabled = YES;
+    }
+    
+    if ([self.pdfView canEditTextRedo])
+        self.redoButton.enabled  = YES;
+     else
+        self.redoButton.enabled  = NO;
+    
+    if ([self.pdfView canEditTextUndo])
+        self.undoButton.enabled  = YES;
+     else
+        self.undoButton.enabled  = NO;
+}
+
 @end

+ 24 - 4
compdfkit-tools/compdfkit-tools/Edit/CPDFEditViewController.m

@@ -24,6 +24,7 @@
 @property (nonatomic, strong) UITableView * tableView;
 @property (nonatomic, strong) CPDFColorPickerView * colorPickerView;
 @property (nonatomic, strong) CPDFEditFontNameSelectView * fontSelectView;
+@property (nonatomic, strong) UIButton *backBtn;
 
 @end
 
@@ -70,6 +71,12 @@
     self.titleLabel.adjustsFontSizeToFitWidth = YES;
     [self.view addSubview:self.titleLabel];
     
+    self.backBtn = [[UIButton alloc] init];
+    self.backBtn.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin;
+    [self.backBtn setImage:[UIImage imageNamed:@"CPDFAnnotationBaseImageBack" inBundle:[NSBundle bundleForClass:self.class] compatibleWithTraitCollection:nil] forState:UIControlStateNormal];
+    [self.backBtn addTarget:self action:@selector(buttonItemClicked_back:) forControlEvents:UIControlEventTouchUpInside];
+    [self.view addSubview:self.backBtn];
+    
     
     self.splitView  = [[UIView alloc] init];
     self.splitView.backgroundColor = [UIColor colorWithRed:245./255 green:245/255. blue:245/255. alpha:245/255.];
@@ -89,9 +96,8 @@
     self.titleLabel.frame = CGRectMake((self.view.frame.size.width - 120)/2, 5, 120, 50);
     self.splitView.frame = CGRectMake(10, 60, self.view.frame.size.width-20, 3);
     self.tableView.frame = CGRectMake(0, 70, self.view.frame.size.width, self.view.frame.size.height - 100);
-
-
     [self.tableView reloadData];
+    self.backBtn.frame = CGRectMake(self.view.frame.size.width - 60, 5, 50, 50);
 
 }
 
@@ -201,6 +207,7 @@
         
         cell.cropImageBlock = ^{
             [self.pdfView beginCropEditArea:self.pdfView.editingArea];
+            [self controllerDismiss];
         };
         
         cell.exportImageBlock = ^{
@@ -209,7 +216,7 @@
                 UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"" message:NSLocalizedString(@"Saved Success!", nil) preferredStyle:UIAlertControllerStyleAlert];
 
                 [alertController addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"OK!", nil) style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
-
+                    [self controllerDismiss];
                 }]];
 
                 [self presentViewController:alertController animated:YES completion:nil];
@@ -217,7 +224,7 @@
                 UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"" message:NSLocalizedString(@"Saved Failed!", nil) preferredStyle:UIAlertControllerStyleAlert];
 
                 [alertController addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"OK!", nil) style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
-
+                    [self controllerDismiss];
                 }]];
 
                 [self presentViewController:alertController animated:YES completion:nil];
@@ -256,6 +263,11 @@
     [self updatePreferredContentSizeWithTraitCollection:self.traitCollection];
 }
 
+#pragma mark - Action
+- (void)buttonItemClicked_back:(UIButton *)button {
+    [self controllerDismiss];
+}
+
 #pragma mark - Accessors
 
 #pragma mark - UIImagePickerControllerDelegate
@@ -272,6 +284,14 @@
     }
     
     [picker dismissViewControllerAnimated:YES completion:nil];
+    
+    [self controllerDismiss];
+}
+
+- (void)controllerDismiss {
+    [self dismissViewControllerAnimated:YES completion:^{
+            
+    }];
 }
 
 @end