Sfoglia il codice sorgente

Add autocomplete text field in the common editor

Ray Zhang 3 anni fa
parent
commit
3c54dd9ca2

+ 1 - 0
common/RAUtils.h

@@ -120,5 +120,6 @@ NS_ASSUME_NONNULL_BEGIN
 + (BOOL)checkPassword:(NSString *) password;
 + (UIViewController *)getCurrentVCFrom:(UIViewController *)rootVC;
 + (UIViewController *)getCurrentVC;
++(NSDictionary* )copyDict:(NSDictionary* ) source;
 @end
 NS_ASSUME_NONNULL_END

+ 5 - 0
common/RAUtils.m

@@ -76,6 +76,11 @@
     
 }
 
++(NSDictionary* )copyDict:(NSDictionary* ) source
+{
+    return [RAConvertor data2dict:[RAConvertor dict2data:source]];
+}
+
 + (NSArray*) allFilesAtPath:(NSString*) dirString
 {
     

+ 9 - 1
common/customUI/commoneditor/CommonEditorAutoCompleteView.h

@@ -7,11 +7,15 @@
 //
 
 #import <UIKit/UIKit.h>
+typedef void(^resultHandler)(NSMutableDictionary *result);
+
+
 @class CommonEditorAutoCompleteView;
 @protocol AutoCompleteDataSource<NSObject>
 @required
 //-( NSArray* )sync_loadCadidate:( NSString*)str search_id:(NSString*) search_id;
--( NSArray* )sync_loadCadidate:( NSString*)str;
+//-( NSArray* )sync_loadCadidate:( NSString*)str;
+-(void)sync_loadCadidate:(NSMutableDictionary*)params completionHandler:(resultHandler)result;
 @end
 
 
@@ -32,8 +36,12 @@
 @property (strong, nonatomic) NSString* keyword;
 @property (strong, nonatomic) NSString* lastSearchID;
 
+@property (strong, nonatomic) NSMutableDictionary* params;
+
 @property (nonatomic , copy) void (^returnValue)(NSString* str);
 -(void) performSearch:(NSString*) keyword;
+-(void) cancelSearch;
+
 //@property (strong,nonatomic) nsa
 @end
 

+ 32 - 22
common/customUI/commoneditor/CommonEditorAutoCompleteView.m

@@ -62,11 +62,11 @@
 
 
 }
--(void) CancelSearch:(NSString*) keyword
+-(void) cancelSearch
 {
     [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(searchAutocomplete:) object:self.keyword];
     self.arr_result = nil;
-    self.hidden=true;
+//    self.hidden=true;
     [self.ResultTableView reloadData];
 }
 
@@ -109,18 +109,20 @@
     }
         __weak typeof(self) weakself = self;
     if(self.dataSource)
-    dispatch_async(dispatch_get_global_queue(0, 0), ^{
-        NSString* searchid=[[NSUUID new] UUIDString];
-        weakself.lastSearchID=searchid;
-//        int s=[RAUtils getRandomNumber:1 to:3];
-//        sleep(s);
-//        NSLog(@"search id %@ sleep %d",searchid,s);
-
-        NSArray* arr_ret=[weakself.dataSource sync_loadCadidate:keyword ];
-        
-//        NSArray* arr_ret=[weakself.dataSource sync_loadCadidate:keyword search_id:weakself.lastSearchID];
-//        self.arr_result =  [self.dataSource sync_loadCadidate:keyword search_id:[[NSUUID new] UUIDString]];
-        dispatch_async(dispatch_get_main_queue(), ^{
+    {
+        //    dispatch_async(dispatch_get_global_queue(0, 0), ^{
+                NSString* searchid=[[NSUUID new] UUIDString];
+                weakself.lastSearchID=searchid;
+        //        int s=[RAUtils getRandomNumber:1 to:3];
+        //        sleep(s);
+        //        NSLog(@"search id %@ sleep %d",searchid,s);
+
+                
+                NSMutableDictionary* params = [self.params mutableCopy];
+                params[@"keyword"] = keyword;
+        [weakself.dataSource sync_loadCadidate:params completionHandler:^(NSMutableDictionary *result) {
+        NSArray* arr_ret = result[@"data"];
+            
             if([searchid isEqualToString:weakself.lastSearchID])
             {
                 self.arr_result = arr_ret;
@@ -130,12 +132,20 @@
             {
                 NSLog(@"expired search");
             }
+        } ];
+                
+        //        NSArray* arr_ret=[weakself.dataSource sync_loadCadidate:keyword search_id:weakself.lastSearchID];
+        //        self.arr_result =  [self.dataSource sync_loadCadidate:keyword search_id:[[NSUUID new] UUIDString]];
+//                dispatch_async(dispatch_get_main_queue(), ^{
+
+
+                    
+//                });
+                
+                //  }
+        //    });
+    }
 
-            
-        });
-        
-        //  }
-    });
     
     
 
@@ -166,8 +176,8 @@
                                       reuseIdentifier:MyIdentifier];
 
     }
-    cell.textLabel.text = self.arr_result[indexPath.row][@"value"];
-    cell.detailTextLabel.text = self.arr_result[indexPath.row][@"description"];
+    cell.textLabel.text = self.arr_result[indexPath.row];//[@"value"];
+    //cell.detailTextLabel.text = self.arr_result[indexPath.row];//[@"description"];
     return cell;
 }
 
@@ -186,7 +196,7 @@
     
     
     if(self.returnValue)
-        self.returnValue(self.arr_result[indexPath.row][@"value"]);
+        self.returnValue(self.arr_result[indexPath.row]/*[@"value"]*/);
 //    self.searchInput.text = nil;
     self.arr_result = nil;
     self.hidden=true;

+ 49 - 10
common/customUI/commoneditor/CommonEditorViewController.m

@@ -6048,14 +6048,22 @@ if(!self.alert.isBeingDismissed)
         {
             if([item_json[@"autocomplete"] boolValue])
             {
+                
+
                 self.autocompleteView.hidden = false;
                
                     CGRect f = self.autocompleteView.frame;
                     CGRect rframe=[RAUtils relativeFrameForScreenWithView:textField];
                     NSLog(@"edit y %f",rframe.origin.y);
                     self.autocompleteView.frame = CGRectMake(f.origin.x, rframe.origin.y+rframe.size.height, f.size.width, f.size.height);
-             
-                [self.autocompleteView performSearch:textField.text];
+                NSString *substring = [NSString stringWithString:textField.text];
+                substring = [substring stringByReplacingCharactersInRange:range withString:string];
+                if(substring.length>1)
+                [self.autocompleteView performSearch:substring];
+                else
+                {
+                    [self.autocompleteView cancelSearch];
+                }
             }
             return TRUE;
         }
@@ -6070,7 +6078,14 @@ if(!self.alert.isBeingDismissed)
                     NSLog(@"edit y %f",rframe.origin.y);
                     self.autocompleteView.frame = CGRectMake(f.origin.x, rframe.origin.y+rframe.size.height, f.size.width, f.size.height);
              
-                [self.autocompleteView performSearch:textField.text];
+                NSString *substring = [NSString stringWithString:textField.text];
+                substring = [substring stringByReplacingCharactersInRange:range withString:string];
+                if(substring.length>1)
+                [self.autocompleteView performSearch:substring];
+                else
+                {
+                    [self.autocompleteView cancelSearch];
+                }
             }
             return (lenth>textField.text.length ||[string isEqualToString:@""]);
         }
@@ -6102,7 +6117,14 @@ if(!self.alert.isBeingDismissed)
                 NSLog(@"edit y %f",rframe.origin.y);
                 self.autocompleteView.frame = CGRectMake(f.origin.x, rframe.origin.y+rframe.size.height, f.size.width, f.size.height);
          
-            [self.autocompleteView performSearch:textField.text];
+            NSString *substring = [NSString stringWithString:textField.text];
+            substring = [substring stringByReplacingCharactersInRange:range withString:string];
+            if(substring.length>1)
+            [self.autocompleteView performSearch:substring];
+            else
+            {
+                [self.autocompleteView cancelSearch];
+            }
             
         }
         return canChange;
@@ -6118,7 +6140,16 @@ if(!self.alert.isBeingDismissed)
                 NSLog(@"edit y %f",rframe.origin.y);
                 self.autocompleteView.frame = CGRectMake(f.origin.x, rframe.origin.y+rframe.size.height, f.size.width, f.size.height);
          
-            [self.autocompleteView performSearch:textField.text];
+            NSString *substring = [NSString stringWithString:textField.text];
+            substring = [substring stringByReplacingCharactersInRange:range withString:string];
+            if(substring.length>1)
+            [self.autocompleteView performSearch:substring];
+            else
+            {
+                [self.autocompleteView cancelSearch];
+//                self.autocompleteView.arr_result = nil;
+//                [self.autocompleteView.ResultTableView reloadData];
+            }
         }
         return canChange&& (lenth>textField.text.length ||[string isEqualToString:@""]);
     }
@@ -6146,6 +6177,7 @@ if(!self.alert.isBeingDismissed)
     if([item_json[@"autocomplete"] boolValue])
     {
         self.autocompleteView.hidden = true;
+        self.autocompleteView.params = nil;
     }
     [self textfieldSetValue:indexPath value:textField.text];
     //    NSMutableDictionary* section_json=nil;
@@ -6452,6 +6484,10 @@ if(!self.alert.isBeingDismissed)
         self.autocompleteView.searchInput.text= textField.text;
         [self.autocompleteView.searchInput becomeFirstResponder];
         __weak typeof(self) weakself = self;
+        NSMutableDictionary* params = [item_json[@"autocomplete_params"] mutableCopy];
+        params[@"full_url"] = item_json[@"full_url"];
+        params[@"url"] = item_json[@"url"];
+        self.autocompleteView.params= params;
         self.autocompleteView.returnValue = ^(NSString *str) {
             //textField  = true;
 //            [textField endEditing:false];
@@ -6471,13 +6507,16 @@ if(!self.alert.isBeingDismissed)
     return YES;
 }
 #pragma mark- autocomplete //自动完成填空内容需要实现此协议
--(nullable NSArray*)sync_loadCadidate:(nonnull NSString*)str
+-(void)sync_loadCadidate:(NSMutableDictionary*)params completionHandler:(resultHandler)result
 {
     
-    NSMutableArray* ret = [NSMutableArray new];
-    NSDictionary* obj = @{@"name":@"",@"value":@"autocomplete datasource loadCadidate does not impl"};
-    [ret addObject:obj];
-    return ret;
+    
+    [RADataProvider request_autocomplete:params completionHandler:result];
+    
+//    NSMutableArray* ret = [NSMutableArray new];
+   // NSDictionary* obj = //@{@"name":@"",@"value":@"autocomplete datasource loadCadidate does not impl"};
+//    [ret addObject:@"autocomplete datasource loadCadidate does not impl"];
+//    return ret;
 }
 
 #pragma mark- img changed