6

Uygulamamda, tablom filtrelemediğimde, bir hücreye dokunduğumda, indirme ilerlemesini gösteren bir UIProgressView görüntülemek için çerçeve yüksekliği artırıldı. Ancak, UISearchDisplayController ile getirilen sonuç denetleyicisi verilerini filtrelediğimde, filtre uygulanmış bu tablo görünümündeki hücreler aynı şekilde davranmaz. Bunun yerine, hücre yeniden boyutlandırılmaz, ilerleme görünümünü göstermez, bir karşıdan yüklemeyi tetiklemez ve uygulama daha sonra çökecektir.UISearchDisplayController'ın kendi tablo görünümünü nasıl denetlerim?

UISearchDisplayController ile sonuçları filtrelediğinde sunulan tablo görünümü üzerinde nasıl denetim kazanabilirim?

DÜZENLEME

İşte benim -tableView:didSelectRowAtIndexPath: yöntemdir. Biraz uzun, ama ben aramadığım zaman iyi çalışıyor.

Bunu bir şekilde uyarlamam gerekir, böylece arama sonuçları denetleyicisinin buna ne tür bir tablo görünümü/getirme sonuçları denetleyicisi ile çalışabileceği konusunda çalışabilir.

- (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... 
         } 
        } 
       } 
      } 
     } 
    } 
} 

cevap

0

Genellikle, tablo görünümü tableView:didSelectRowAtIndexPath: geçirilen eğer durum için arama ekran kontrolörün "searchResultsTableView" ve program alternatif davranış eşittir kontrol ederim.

Sorununuzun daha karmaşık olabileceği anlaşılıyor. tableView:didSelectRowAtIndexPath: için kodu gönderir misiniz?

if (tableView == self.searchDisplayController.searchResultsTableView) { 
    // behavior specific to search display controller table view 
} 
else { 
    // behavior specific to the original, unfiltered table view 
} 
: Aşağıdaki çek kullanarak UISearchDisplayController masa görünümü ile çalışıyorsanız tablo görünümü temsilci yöntemlerden herhangi birinde
İlgili konular