0

我已经实现了 UISearchControl(iOS8 版本与以前的版本略有不同)。当我根据下面看到的 NSLog 语句输入内容时,它似乎正确触发,唯一的问题是 UITableView 实际上永远不会更新,我在 numberOfRowsInSection 的 } else { 部分添加了一个 NSLog 以确认它没有被调用像这样:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    if (tableView == self.tableView) {

        return self.objects.count;

    } else {
        // NOT BEING FIRED WHEN STUFF IS TYPED IN SEARCH BAR?
        NSLog(@"Search Results  Returned in TableView");
        return self.searchResults.count;

    }
}

尽管这些方法运行良好......并且根据 updateFilter 方法中添加的 NSLog 正确更新了 searchResults 数组:

#pragma mark - UISearchResultsUpdating
-(void)updateSearchResultsForSearchController:(UISearchController *)searchController {
    NSString *searchString = [self.searchController.searchBar text];
    [self updateFilteredContentForSaleName:searchString];

    // ASSUMING THIS IS WHAT CAUSES TABLEVIEW TO REFRESH, BUT ISNT REFRESHING IT WITH NEW ARRAY?

     [((UITableViewController *)self.searchController.searchResultsController).tableView reloadData];
}
#pragma mark - Content Filtering
- (void)updateFilteredContentForSaleName:(NSString *)saleName {
    [self.searchResults removeAllObjects];

    for (PFObject *sale in self.objects)
    {
        NSString *saleTitle = [sale objectForKey:@"name"];
        if ([[saleTitle lowercaseString] hasPrefix:[saleName lowercaseString]])
        {
            [self.searchResults addObject:sale];
        }
    }
    // THIS LOG SHOWS SEARCH RESULTS CORRECTLY HOW THEY SHOULD BE, JUST NO UPDATE TO UITABLEVIEW

    NSLog(@"%@", self.searchResults);
}

但根本没有更新表格视图......

知道这是为什么吗?我在这里调用刷新错误吗?:

 [((UITableViewController *)self.searchController.searchResultsController).tableView reloadData];

我也尝试过 PFQueryTableViewController *,因为这基本上就是我用于实际视图控制器的东西,但没有运气。

编辑

这是用于创建 UISearchControl 的代码

@interface LocalSalesViewController () <UISearchResultsUpdating>


@property (nonatomic, strong) UISearchController *searchController;
@property (nonatomic, strong) NSMutableArray *searchResults; // Filtered search results

@end

@implementation LocalSalesViewController
- (id)initWithCoder:(NSCoder *)aCoder {
    self = [super initWithCoder:aCoder];
    if (self) {
        self.parseClassName = @"Sales";
        self.pullToRefreshEnabled = YES;
        self.paginationEnabled = YES;
        self.objectsPerPage = 25;
    }
    return self;
}

- (void)viewDidLoad {
    [super viewDidLoad];

    self.searchResults = [NSMutableArray array];
    self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
    self.searchController.searchResultsUpdater = self;
    self.searchController.searchBar.frame = CGRectMake(self.searchController.searchBar.frame.origin.x, self.searchController.searchBar.frame.origin.y, self.searchController.searchBar.frame.size.width, 44.0);
    self.tableView.tableHeaderView = self.searchController.searchBar;
    self.definesPresentationContext = YES;

}
4

0 回答 0