如何实现搜索Objective-c?

时间:2011-01-19 04:30:56

标签: iphone objective-c xcode sorting

我有这样的记录。

FirstName - LastName - PhoneNo - 地址 - 名称

  1. A - Mick - 789367789 - 纽约 - 教授

  2. B - Jossef - 534647458 - 美国 - 医生

  3. C - Sha - 342576765 - 美国 - 医生

  4. D - Gee - 535346457 - 美国 - 商人

  5. ......喜欢这个

    我在UITeView中使用UISearchBar显示一个FirstName。搜索工作正常,它根据您在SearchBar中键入的关键字过滤数据,但假设您正在键入M它列出M的所有项目,然后当我点击M的第一项时,它显示A的详细信息然后M在下一个视图。

    我认为你可以理解我的问题。

    如何解决这个如何在与记录对应的Next视图中传递多个值的问题。?

    谢谢,

    这个函数我从TableView的相同代码(带有搜索栏的苹果示例代码)中获取。 我按照我的逻辑修改了这个。

     - (void) searchTableView 
    {
    
        NSString *searchText = searchBar.text;
        NSMutableArray *searchArray = [[NSMutableArray alloc] init];
    
        NSInteger TotalNoOfRecords=[self.SearchtableDataSource count];
        for (int i=0;i<TotalNoOfRecords;i++)
        {   NSDictionary *dictionary = [self.SearchtableDataSource objectAtIndex:i];
            NSArray *array = [dictionary objectForKey:@"Title"];
            NSString *arrayID=  [dictionary objectForKey:@"ID"];
            NSLog(@"Testing - Id-%d",arrayID);
            [searchArrayID addObject:arrayID];
            [searchArray addObject:array];
        }
    
        for (NSString *sTemp in searchArray)
        {
    
            NSRange titleResultsRange = [sTemp rangeOfString:searchText options:NSCaseInsensitiveSearch];
    
            if (titleResultsRange.length > 0)
            {
                    [copyListOfItems addObject:sTemp];
            }
        }
    
        [searchArray release];
        searchArray = nil;
     }
    

    这是我的didSelectRowAtIndexPath代码,我知道这需要修改,但我不知道怎么做?

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
    {
        NSDictionary *dictionary = [self.SearchtableDataSource objectAtIndex:indexPath.row];
        FirstName=  [dictionary objectForKey:@"FirstName"];
        LastName=[dictionary objectForKey:@"LastName"];
        DetailViewController *ivc = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:[NSBundle mainBundle]];    
        ivc.FirstName = FirstName;  
        ivc.LastName=LastName;
        ivc.Title=[dictionary objectForKey:@"Details of Person"];  
        [self.navigationController pushViewController:ivc animated:YES];    
        [ivc release];
    }
    

    请帮帮我......

    谢谢

2 个答案:

答案 0 :(得分:0)

检查您是否正在 -didSelectRowAtIndexPath 中的 copyListOfItems 中检索值。

修改

你应该首先清楚地理解逻辑。 SearchedTableDatasource包含要在tableview中加载的tableViews完整数据集。 copyListofItems包含过滤的项目。所以在didSelectRowAtIndexPath中你应该编码如下,

if(searching==YES)

{

//retrieve the values from copyListofItems array

}

else

{

//retrieve the values from SearchedTableDatasource array

}

并且您正在使用void函数进行搜索,如果是,则将copyListofItems数组声明为global,或者使函数返回NSMutableArray实例。

答案 1 :(得分:0)

在didSelectrowatIndexPath方法中更改你的init方法并传递字典对象并在那里设置DetailViewController属性,我希望这对我有效。