如何在iOS 7 tableView中实现搜索栏?

时间:2014-03-03 18:34:13

标签: ios uitableview sqlite uisearchbar

我是编程新手。我正在构建一个扫描条形码的程序,并将UPC编号放在我的表格视图的搜索框中。现在我要做的就是创建搜索UPC扫描。 viewTable正在显示sqlite数据库中的库存。 搜索栏是我需要做的就是编程搜索,我还没有找到任何关于如何做到这一点的好教程。我该如何实现呢?

#import "MasterViewController.h"
#import "DetailViewController.h"
#import "ScanViewController.h"
#import <sqlite3.h>


@interface MasterViewController ()
{
    NSMutableArray *_objects;

}
@end

@implementation MasterViewController
{


}

- (void)awakeFromNib
{
    [super awakeFromNib];
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    // Get the DBAccess object;
    DBAccess *dbAccess = [[DBAccess alloc] init];
    // Get the products array from the database
    self.products = [dbAccess getAllProducts];
    // Close the database because we are finished with it
    [dbAccess closeDatabase];
}


- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (void)insertNewObject:(id)sender
{
    if (!_objects) {
        _objects = [[NSMutableArray alloc] init];
    }
    [_objects insertObject:[NSDate date] atIndex:0];
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
    [self.tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
}

#pragma mark - Table View

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView
 numberOfRowsInSection:(NSInteger)section
{
    return [self.products count];
}

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
   static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    // Configure the cell.
    cell.accessoryType = UITableViewCellAccessoryNone;

    Product* product = [self.products objectAtIndex:[indexPath row]];
    cell.textLabel.text = product.serial;

    return cell;


}


- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Return NO if you do not want the specified item to be editable.
    return NO;
}


- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        [_objects removeObjectAtIndex:indexPath.row];
        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
    } else if (editingStyle == UITableViewCellEditingStyleInsert) {
        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view.
    }
}


- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"showDetail"])
    {
        NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];

        Product *theProduct = _products[indexPath.row];
        [[segue destinationViewController] setDetailItem:theProduct];
        NSLog(@"this is prepare for segue");
    }


}

- (void)scanditSDKOverlayController: (ScanditSDKOverlayController *)scanditSDKOverlayController
                     didScanBarcode:(NSDictionary *)barcodeResult
{
    // add your own code to handle the barcode result e.g.

    scanResult = [barcodeResult valueForKey:@"barcode"];
    //barcodelabel.text = [NSString stringWithFormat:@"The barcode is: %@", scanResult];
    searchLabel.text = [NSString stringWithFormat:@"%@", scanResult];
    [self dismissViewControllerAnimated:YES completion:nil];
    self.tableView.contentOffset = CGPointMake(0, 0 - self.tableView.contentInset.top);



    [searchLabel becomeFirstResponder];
    [super viewDidAppear:YES];

}



- (void)scanditSDKOverlayController: (ScanditSDKOverlayController *)scanditSDKOverlayController
                didCancelWithStatus:(NSDictionary *)status
{
    // add your own code to handle the user canceling the barcode scan process

}


- (void)scanditSDKOverlayController: (ScanditSDKOverlayController *)scanditSDKOverlayController
                    didManualSearch:(NSString *)input
{
    // add your own code to handle user input in the search bar
    // (only required if you use the search bar provided by the Scandit SDK
}



-(IBAction)scanClick:(id)sender;
{
    ScanditSDKBarcodePicker *picker = [[ScanditSDKBarcodePicker alloc] initWithAppKey:@"oK1ckH/7EeOPhaseNDXmvNVu+pCX2y6UHZWZ/VYw0hE"];

    picker.overlayController.delegate = self;

    [picker startScanning];

    [self presentViewController:picker animated:YES completion:nil];
    //[[self navigationController]pushViewController:picker animated:YES];
    [searchLabel becomeFirstResponder];


}


-(void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
    [searchBar resignFirstResponder];

}

-(void)searchBarCancelButtonClicked:(UISearchBar *)searchBar
{
    searchBar.text = nil;
    [searchBar resignFirstResponder];

}


@end

1 个答案:

答案 0 :(得分:2)

我想出了自己的问题。对于任何偶然发现这个问题的人,我使用了NSPredicate。我假设如果有一个sqlite数据库,那么你不能使用NSPredicate,但我让它工作。只要数据在数组中..