如何显示单词的结果?

时间:2016-03-07 10:25:23

标签: ios objective-c

我在iOS中创建字典,我从JSON url获取数据。我从SearchBar正确显示单词结果有问题。例如,当我在searchBar中输入内容并单击某些结果时,始终显示第一个结果的值。

下面我将我的屏幕显示出来。

enter image description here

enter image description here

在第二个屏幕上,我点击Ruby on Rails并首先向我展示结果“Objective C”,为什么(Objective C是JSON文件中的第一个结果)? 这是我的代码:http://pastebin.com/EPVTpF9U

    #pragma mark - Navigation
    -(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
        if([[segue identifier] isEqualToString:@"pushDetailView"]){
            NSIndexPath * indexPath = [self.tableView indexPathForSelectedRow];
            DetailViewController *modalVC = (DetailViewController*)segue.destinationViewController;
            modalVC.detailArray = [self.finalResultArray objectAtIndex:indexPath.row];
        }
    }

    #pragma mark - UISearchDisplayDelegate
    // register a cell reuse identifier for the search results table view
    -(void)searchDisplayController:(UISearchDisplayController *)controller
    didLoadSearchResultsTableView:(UITableView *)tableView {
        [tableView registerClass:[UITableViewCell class]
          forCellReuseIdentifier:@"Cell"];
    }

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

    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
        if(tableView == self.tableView){
            return self.finalResultArray.count;
        }else{
            return self.results.count;
        }
    }

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
        static NSString *CellIdetifier = @"Cell";
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdetifier forIndexPath:indexPath];

        if(!cell){
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdetifier];
            cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
        }
        if(tableView == self.tableView){
            cell.textLabel.text = [[self.finalResultArray objectAtIndex:indexPath.row] objectForKey:@"expression"];
            cell.detailTextLabel.text = [[self.finalResultArray objectAtIndex:indexPath.row] objectForKey:@"meaning"];
            cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
        }
        else{
            cell.textLabel.text = [[self.results objectAtIndex:indexPath.row] objectForKey:@"expression"];
            cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
        }

        UIView *customColorView = [[UIView alloc] init];
        customColorView.backgroundColor = [UIColor colorWithRed:180/255.0
                                                          green:138/255.0
                                                           blue:171/255.0
                                                          alpha:0.5];
        cell.selectedBackgroundView = customColorView;
        return cell;
    }

    -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
        [self performSegueWithIdentifier:@"pushDetailView" sender:self];
    }

    - (void)simpleJsonParsing
    {
        //-- Make URL request with server
        NSHTTPURLResponse *response = nil;
        NSString *jsonUrlString = [NSString stringWithFormat:@"https://uidictionary.herokuapp.com/phrases.json"];
        NSURL *url = [NSURL URLWithString:[jsonUrlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

        //-- Get request and response though URL
        NSURLRequest *request = [[NSURLRequest alloc]initWithURL:url];
        NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];

        //-- JSON Parsing
        NSArray *result = [[NSJSONSerialization JSONObjectWithData:responseData options:
                            NSJSONReadingMutableContainers error:nil] objectForKey:@"phrases"];

        [self.finalResultArray removeAllObjects];
        for (NSMutableDictionary *tmp in result)
        {
            NSMutableDictionary *temp = [NSMutableDictionary new];
            [temp setObject:[tmp objectForKey:@"expression"] forKey:@"expression"];
            [temp setObject:[tmp objectForKey:@"meaning"] forKey:@"meaning"];

            [self.finalResultArray addObject:temp];
        }
        if (self.finalResultArray){
            [self.tableView reloadData];
        }
    }

    - (void)updateSearchResultsForSearchController:(UISearchController *)searchController {
        self.results = [self.finalResultArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"%K contains[c] %@", @"expression", searchController.searchBar.text]];
        NSLog(@"Filterd Array:-%@", self.results);

        // hand over the filtered results to our search results table
        UITableViewController *tableController = (UITableViewController *)self.searchController.searchResultsController;
        tableController.tableView.dataSource = self;
        tableController.tableView.delegate = self;
        [tableController.tableView reloadData];
    }

2 个答案:

答案 0 :(得分:1)

只需替换Bellow Code: -

self.results = [self.finalResultArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"%K BEGINSWITH[c] %@", @"expression", searchController.searchBar.text]];

答案 1 :(得分:1)

@ mechu911

用以下代码替换您的方法。

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
        if([[segue identifier] isEqualToString:@"pushDetailView"]){
            NSIndexPath * indexPath = [self.tableView indexPathForSelectedRow];
            DetailViewController *modalVC = (DetailViewController*)segue.destinationViewController;
            modalVC.detailArray = [self.result objectAtIndex:indexPath.row];
        }
    }

但你必须像

那样进行检查
   if(tableView == self.tableView){
         modalVC.detailArray = [self.finalResultArray objectAtIndex:indexPath.row];}
    else{modalVC.detailArray = [self.result objectAtIndex:indexPath.row];}