سؤال

في طلبي ، عندما لا أقوم بتصفية الجدول الخاص بي ، عندما أنقر على خلية ، يتم زيادة ارتفاع الإطار الخاص به من أجل عرض أ UIProgressView هذا يظهر التنزيل التقدم.

ومع ذلك ، عندما أقوم بتصفية بيانات وحدة تحكم النتائج المحتضرة باستخدام أ UISearchDisplayController, ، لا تتصرف الخلايا في طريقة عرض الجدول المصفاة هذا بنفس الطريقة.

بدلاً من ذلك ، لا يتم تغيير حجم الخلية ، ولا تُظهر طريقة عرض التقدم ، ولا تؤدي إلى تنزيل ، ويتعطل التطبيق لاحقًا.

كيف يمكنني السيطرة على عرض الجدول الذي يتم تقديمه عند تصفية النتائج مع UISearchDisplayController?

تعديل

هنا أنا -tableView:didSelectRowAtIndexPath: طريقة. إنه طويل بعض الشيء ، لكن جوهره هو أنه يعمل بشكل جيد عندما لا أبحث.

أعتقد أنني بحاجة إلى تكييف هذا بطريقة أو بأخرى ، بحيث يمكنه العمل مع أي وحدة تحكم / تحكم في عرض الجدول الذي يتم إلقاؤه في هذا الجدول.

- (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...
                        }
                    }
                }
            }
        }
    }
}
هل كانت مفيدة؟

المحلول

في أي من أساليب مندوب عرض الجدول ، يمكنك اكتشاف ما إذا كنت تعمل مع عرض جدول UISearchDisplayController باستخدام الشيك التالي:

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

نصائح أخرى

عادة ، يمكنك التحقق مما إذا كان عرض الجدول يتم تمريره إليه tableView:didSelectRowAtIndexPath: يساوي وحدة تحكم عرض البحث الخاصة بك "SearchResultStableView" وبرنامج السلوك البديل لهذه الحالة.

يبدو أن مشكلتك قد تكون أكثر تعقيدًا. هل يمكنك نشر الرمز لـ tableView:didSelectRowAtIndexPath:?

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top