Browse Source

Add Searchbar to Database Table Viewer Tables List #352

This Commit adds a Searchbar to Database Table Viewer Tables List.

For that it turns FLEXTableListViewController into a FLEXTableViewController sublcass, calls showSearchbar=YES and implements updateSearchResults
Dominik Pich 6 years ago
parent
commit
2f93050e2e

+ 2 - 2
Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableListViewController.h

@@ -6,9 +6,9 @@
 //  Copyright © 2015年 Peng Tao. All rights reserved.
 //
 
-#import <UIKit/UIKit.h>
+#import <FLEX/FLEXTableViewController.h>
 
-@interface FLEXTableListViewController : UITableViewController
+@interface FLEXTableListViewController : FLEXTableViewController
 
 + (BOOL)supportsExtension:(NSString *)extension;
 - (instancetype)initWithPath:(NSString *)path;

+ 33 - 7
Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableListViewController.m

@@ -21,6 +21,7 @@
 }
 
 @property (nonatomic) NSArray<NSString *> *tables;
+@property (nonatomic) NSArray<NSString *> *filteredTables;
 
 + (NSArray<NSString *> *)supportedSQLiteExtensions;
 + (NSArray<NSString *> *)supportedRealmExtensions;
@@ -67,11 +68,35 @@
         [array addObject:columnName];
     }
     self.tables = array;
+    self.filteredTables = array;
 }
 
+- (void)viewDidLoad
+{
+    [super viewDidLoad];
+    
+    self.showsSearchBar = YES;
+}
+
+#pragma mark - Search bar
+
+- (void)updateSearchResults:(NSString *)searchText
+{
+    if (searchText.length > 0) {
+        NSPredicate *searchPredicate = [NSPredicate predicateWithFormat:@"SELF CONTAINS[cd] %@", searchText];
+        self.filteredTables = [self.tables filteredArrayUsingPredicate:searchPredicate];
+    } else {
+        self.filteredTables = self.tables;
+    }
+    [self.tableView reloadData];
+}
+
+
+#pragma mark - Table View Data Source
+
 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
 {
-    return self.tables.count;
+    return self.filteredTables.count;
 }
 
 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
@@ -81,7 +106,7 @@
         cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                       reuseIdentifier:@"FLEXTableListViewControllerCell"];
     }
-    cell.textLabel.text = self.tables[indexPath.row];
+    cell.textLabel.text = self.filteredTables[indexPath.row];
     return cell;
 }
 
@@ -90,19 +115,20 @@
 {
     FLEXTableContentViewController *contentViewController = [FLEXTableContentViewController new];
     
-    contentViewController.contentsArray = [_dbm queryAllDataWithTableName:self.tables[indexPath.row]];
-    contentViewController.columnsArray = [_dbm queryAllColumnsWithTableName:self.tables[indexPath.row]];
+    contentViewController.contentsArray = [_dbm queryAllDataWithTableName:self.filteredTables[indexPath.row]];
+    contentViewController.columnsArray = [_dbm queryAllColumnsWithTableName:self.filteredTables[indexPath.row]];
     
-    contentViewController.title = self.tables[indexPath.row];
+    contentViewController.title = self.filteredTables[indexPath.row];
     [self.navigationController pushViewController:contentViewController animated:YES];
 }
 
-
 - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
 {
-    return [NSString stringWithFormat:@"%lu tables", (unsigned long)self.tables.count];
+    return [NSString stringWithFormat:@"Tables (%lu)", (unsigned long)self.filteredTables.count];
 }
 
+#pragma mark - FLEXTableListViewController
+
 + (BOOL)supportsExtension:(NSString *)extension
 {
     extension = extension.lowercaseString;