分组部分中的uisearchbar uitable [英] uisearchbar in grouped section uitable

查看:23
本文介绍了分组部分中的uisearchbar uitable的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我拼凑了几个教程来创建一个带有部分的分组表,现在我正在尝试让 uisearchbar 工作.我遇到的问题是如何在分组的部分中进行搜索.

I've pieced together several tutorials to create a grouped table with sections and I'm now trying to get a uisearchbar to work. the problem I'm having is how to search within the grouped sections.

我已经阅读了这篇文章建议的类似问题,但不能

I've read the similar questions this post suggested but can't

这是创建分组部分的代码

This is the code to create the grouped sections

#import "Job.h"      // A model for the data
#import "Address.h"  // Another model for the data

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.theTable.delegate = self;
    self.theTable.dataSource =self;

    _searchBar.delegate = (id)self;

    FMDBDataAccess *db = [[FMDBDataAccess alloc] init];

    jobs = [[NSMutableArray alloc] init];
    jobs = [db getJobs:1];

    _sections = [[NSMutableDictionary alloc] init];

    NSMutableArray *jobsTempArray = [db getJobsAsDictionary:1];

    BOOL found;

    // Loop through the books and create our keys
    for (NSDictionary *book in jobsTempArray)
    {
        NSString *cLong = [book objectForKey:@"addrAddress"];

        NSString *c = [cLong substringToIndex:1];

        found = NO;

        for (NSString *str in [_sections allKeys])
        {
            if ([str isEqualToString:c])
            {
                found = YES;
            }
        }

        if (!found)
        {
            [_sections setValue:[[NSMutableArray alloc] init] forKey:c];
        }

    }

    // Loop again and sort the books into their respective keys
    for (NSDictionary *book in jobsTempArray)
    {
        [[_sections objectForKey:[[book objectForKey:@"addrAddress"] substringToIndex:1]] addObject:book];
    }

    // Sort each section array
    for (NSString *key in [_sections allKeys])
    {
        [[_sections objectForKey:key] sortUsingDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"addrAddress" ascending:YES]]];
    }

}

这是搜索的代码

-(void)searchBar:(UISearchBar*)searchBar textDidChange:(NSString*)text
{
    if(text.length == 0)
    {
        _isFiltered = FALSE;
    }
    else
    {
        _isFiltered = true;
        _filteredjobs = [[NSMutableArray alloc] init];

        //for (Job* book in jobs)
        //for (Job* book in [_sections allKeys])
        //for (NSString *food in [_sections allKeys])
        for (NSDictionary* book in [_sections allKeys])
        {
            NSString *addrStr = [book objectForKey:@"addrAddress"];
            NSString *postStr = [book objectForKey:@"addrPostcode"];

            //NSRange nameRange = [book.jobAddress rangeOfString:text options:NSCaseInsensitiveSearch];
            NSRange nameRange = [addrStr rangeOfString:text options:NSCaseInsensitiveSearch];

            //NSRange descriptionRange = [book.jobPostcode rangeOfString:text options:NSCaseInsensitiveSearch];
            NSRange descriptionRange = [postStr rangeOfString:text options:NSCaseInsensitiveSearch];

            if(nameRange.location != NSNotFound || descriptionRange.location != NSNotFound)
            {
                [_filteredjobs addObject:book];
            }
        }
    }

    [self.theTable reloadData];
}

我已经意识到我需要将 for (Job* food in jobs) 更改为 for (NSDictionary* book in [_sections allKeys]) 但是我被困在如何在 [_sections allKeys]

I've got as far as realising I need to change for (Job* food in jobs) to for (NSDictionary* book in [_sections allKeys]) but I'm stuck how to search within [_sections allKeys]

特别是这一行

NSRange nameRange = [addrStr rangeOfString:text options:NSCaseInsensitiveSearch];

-[__NSCFString objectForKey:]: 无法识别的选择器发送到实例 0x692e200

-[__NSCFString objectForKey:]: unrecognized selector sent to instance 0x692e200

*** 由于未捕获的异常NSInvalidArgumentException"而终止应用程序,原因:-[__NSCFString objectForKey:]:无法识别的选择器发送到实例 0x692e200':

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString objectForKey:]: unrecognized selector sent to instance 0x692e200':

有什么想法吗?PS 把我当作菜鸟,我需要一些代码和解释——我还在学习 obj-c

Any ideas? PS Treat me as a noob, I'll need some code as well as explanation - I'm still learning obj-c

推荐答案

我在UISearchBar - 搜索对象数组的 NSDictionary 并阅读所有键.

基本上循环遍历分组的 NSDictionary 并提取 NSArrays,然后再次循环搜索...

Basically loop through the grouped NSDictionary and extract the NSArrays, then loop through again searching...

-(void)searchBar:(UISearchBar*)searchBar textDidChange:(NSString*)text
{
    if(text.length == 0)
    {
        _isFiltered = FALSE;
    }
    else
    {
        _isFiltered = true;
        _filteredjobs = [[NSMutableArray alloc] init];

        NSString *currentLetter = [[NSString alloc] init];

        for (int i=0; i<[_sections count]; i++)
        {
            currentLetter = [[_sections allKeys] objectAtIndex:i];

            NSArray *jobsForKey = [ [NSArray alloc] initWithArray:[_sections objectForKey:[[_sections allKeys] objectAtIndex:i]] ];

            for (int j=0; j<[jobsForKey count]; j++)
            {
                NSDictionary *book = [jobsForKey objectAtIndex:j];
                NSRange titleResultsRange = [[book objectForKey:@"addrAddress"] rangeOfString:text options:NSCaseInsensitiveSearch];

                if(titleResultsRange.location != NSNotFound)
                {
                    [_filteredjobs addObject:book];
                }
            }
        }

    }

    [self.theTable reloadData];
}

这篇关于分组部分中的uisearchbar uitable的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆