Ios 已激发UISearchControl委托,但Tableview中未显示任何对象
我已经实现了UISearchControl iOS8版本,它与以前的版本略有不同。当我根据下面看到的NSLog语句键入内容时,它似乎启动正确,唯一的问题是UITableView实际上从未更新过,我在numberOfRowsInSection的}else{部分添加了一个NSLog,以确认它不是这样调用的:Ios 已激发UISearchControl委托,但Tableview中未显示任何对象,ios,objective-c,uitableview,uisearchcontroller,Ios,Objective C,Uitableview,Uisearchcontroller,我已经实现了UISearchControl iOS8版本,它与以前的版本略有不同。当我根据下面看到的NSLog语句键入内容时,它似乎启动正确,唯一的问题是UITableView实际上从未更新过,我在numberOfRowsInSection的}else{部分添加了一个NSLog,以确认它不是这样调用的: - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { if
- (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);
}
但是没有更新tableview
知道这是为什么吗?我是不是打错电话了
[((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;
}
数据源呢?您是否已将其添加到tableview并实现了其方法?是的,但问题是在调用刷新时没有调用numberOfRowsInSection。数据正常显示良好,并且假设一旦我获得表进行实际刷新,它将显示良好。是否未调用它或tableview==self.tableView?因为如果你使用同一个表来显示搜索结果,看起来你总是会陷入if条件哦,那么你是说if总是按照我设置的方式来调用,因为我在同一个表视图中使用它们?那么我该如何解决这个问题以使用同一个表视图?或者我必须两个独立的搜索控制器,以某种方式隐藏另一个并在上面显示一个?将您的代码张贴在您实际创建和设置搜索控制器的位置。您还应该使用UISearchController示例应用程序查看表格搜索。