6

Nella mia applicazione, quando non sto filtrando il mio tavolo, quando tocco su una cella, l'altezza della cornice viene aumentata per visualizzare un UIProgressView che mostra il progresso del download.Come controllare la vista tabella di UISearchDisplayController?

Tuttavia, quando filtro i dati del controller dei risultati recuperati con un UISearchDisplayController, le celle in questa vista tabella filtrata non si comportano nello stesso modo.

Invece, la cella non viene ridimensionata, non mostra la vista di avanzamento, non attiva un download e l'applicazione si blocca successivamente.

Come ottenere il controllo sulla vista tabella presentata quando si filtrano i risultati con UISearchDisplayController?

EDIT

Ecco il mio metodo -tableView:didSelectRowAtIndexPath:. È un po 'lungo, ma il succo è che funziona bene quando non sto cercando.

Penso di aver bisogno di adattare questo in qualche modo, in modo che possa funzionare con qualsiasi vista tabella/controller risultati recuperati che il controller dei risultati della ricerca sta lanciando a questo.

- (void) tableView:(UITableView *)tv didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    [tv deselectRowAtIndexPath:indexPath animated:YES]; 

    if ([self.searchBar isFirstResponder]) 
     [self.searchBar resignFirstResponder]; 

    MyObject *_myObject = (MyObject *)[self.fetchedResultsController objectAtIndexPath:indexPath]; 

    if (self.isSimulatingFileHierarchy) 
    { 
     if ([_myObject isFolder]) 
     { 
      ObjectsViewController *_objectsViewController = [[ObjectsViewController alloc] initWithNibName:@"ObjectsViewController" bundle:nil]; 
      _objectsViewController.managedObjectContext = self.managedObjectContext; 
      _objectsViewController.nodeID = self.nodeID; 
      _objectsViewController.nodeName = self.nodeName; 
      _objectsViewController.parentObjectKey = [_myObject cleanedKey]; 

      if (self.parentObjectKey) 
       _objectsViewController.title = [[_myObject cleanedKey] stringByTrimmingPrefix:[self.parentObjectKey stringByAppendingString:@"/"]]; 
      else 
       _objectsViewController.title = [_myObject cleanedKey]; 

      [self.navigationController pushViewController:_objectsViewController animated:YES]; 
      UIBarButtonItem *_backButton = [[UIBarButtonItem alloc] initWithTitle:self.title style:UIBarButtonItemStyleDone target:nil action:nil]; 
      self.navigationItem.backBarButtonItem = _backButton; 
      [_backButton release]; 
      [_objectsViewController release]; 
     } 
     else { 
      // 
      // If we don't have data cached for this object, we add a request for the object's bytes to the objectRequestQueue 
      // 
      // 1. We add a progress indicator to the object's cell (we have an indexPath) 
      // 2. We store the data to the Documents folder 
      // 
      // Once we have the data, we push a ViewerViewController subclass that is specific to the object content type 
      // 

      if ((!_myObject.isDownloading) && ([_myObject.localPath length] == 0)) 
      { 
       if ([AwsObject objectContentSupportedForType:[_myObject.contentType intValue]]) 
       { 
        // 
        // Start request and redraw row with UIProgressView 
        // 
        [self triggerObjectRequestAdditionForObject:_myObject atIndexPath:indexPath]; 
       } 
       else { 
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"ObjectsViewObjectRequestUnsupportedTypeAlertViewTitle", @"") message:NSLocalizedString(@"ObjectsViewObjectRequestUnsupportedTypeAlertViewMessage", @"") delegate:self cancelButtonTitle:nil otherButtonTitles:NSLocalizedString(@"ObjectsViewObjectRequestUnsupportedTypeAlertViewContinue", @""), nil]; 
        [alert show]; 
        [alert release]; 
       } 
      } 
      else if ((_myObject.isDownloading) && ([_myObject.localPath length] == 0)) 
      { 
       // 
       // Cancel request and redraw row without progress view 
       // 
       [self triggerObjectRequestRemovalForObject:_myObject atIndexPath:indexPath]; 
      } 
      else if ((!_myObject.isDownloading) && ([_myObject.localPath length] != 0)) 
      { 
       // 
       // Launch viewer for supported MIME type 
       // 
       switch ([_myObject.contentType intValue]) { 
        case kObjectContentTypeApplicationMsword: { 
         [self pushWebViewerViewController:_myObject withTextEncoding:@"UTF-8"]; 
         break; 
        } 
        // handle other MIME types here... 
       } 
      } 
      else { 
       if ([_myObject isFolder]) { } 
       else { 
        if ((!_myObject.isDownloading) && ([_myObject.localPath length] == 0)) 
         [self triggerObjectRequestAdditionForObject:_myObject atIndexPath:indexPath]; 
        else if ((_myObject.isDownloading) && ([_myObject.localPath length] == 0)) 
         [self triggerObjectRequestRemovalForObject:_myObject atIndexPath:indexPath]; 
        else if ((!_myObject.isDownloading) && ([_myObject.localPath length] != 0)) { 
         switch ([_myObject.contentType intValue]) { 
          case kObjectContentTypeApplicationMsword: { 
           [self pushWebViewerViewController:_myObject withTextEncoding:@"UTF-8"]; 
           break; 
          } 
          // handle other MIME types here... 
         } 
        } 
       } 
      } 
     } 
    } 
} 

risposta

12

In qualsiasi dei metodi vista tabella delegato, è in grado di rilevare se si sta lavorando con vista tabella del UISearchDisplayController utilizzando il seguente controllo:

if (tableView == self.searchDisplayController.searchResultsTableView) { 
    // behavior specific to search display controller table view 
} 
else { 
    // behavior specific to the original, unfiltered table view 
} 
0

In genere, si controlla se la visualizzazione della tabella di essere passato a tableView:didSelectRowAtIndexPath: è uguale a un comportamento alternativo "searchResultsTableView" e il programma di ricerca del controllore di visualizzazione per questo caso.

Sembra che il problema potrebbe essere più complicato. Puoi pubblicare il codice per tableView:didSelectRowAtIndexPath:?

Problemi correlati