Привет всем, я пытаюсь отфильтровать поиск своих пользователей с помощью UISearchBar .. Список моих пользователей находится в RealTimeDatabase Firebase ..
Способ, которым я показывал пользователей в tableviewcontroller, был:
- Сделайте запрос для получения данных
- Я создал свой собственный NSObject класс (называемый "пользователь" ) для управления данными иотобразить в контроллере таблицы ..
Теперь моя проблема в том, что я не могу понять, как реализовать функцию фильтрации этих данных, если пользователь использует UISearchBar, может кто-нибудь из вас помочь мне решить эту проблемупроблема?
В Нижнем я покажу вам запрос данных из базы данных и способ, которым я реализовывал фильтр панели поиска. Конечно, я ошибаюсь в способе фильтрации данных, и я не могу понять, где я 'м неправильно .. я пробовал много способов но не могу решить ...
@interface UserSearchViewController () <UISearchBarDelegate, UITableViewDelegate, UITableViewDataSource>
@property (nonatomic, strong) NSMutableArray *users;
@property (nonatomic, strong) NSMutableArray *filteredUsers;
@property (nonatomic, assign) BOOL isFiltered;
@property (nonatomic, strong) UserHandler *user;
- (void)viewDidLoad {
[super viewDidLoad];
/// Prepariamo la MutableArray che contiene i dati degli user
_users = NSMutableArray.new;
_searchBar.delegate = self;
[self setupTableView];
[self retrieveAllUser];
}
#pragma mark - Search Bar Filter Data
-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText {
[self filteredContent:searchText];
[self.tableView reloadData];
}
-(void)filteredContent:(NSString *)searchText {
if (searchText.length == 0) _isFiltered = NO;
else {
_isFiltered = YES;
_filteredUsers = NSMutableArray.new;
for (NSString *str in self.users) {
NSRange range = [self.user.name rangeOfString:searchText options:NSCaseInsensitiveSearch];
if (range.location != NSNotFound) [self.filteredUsers addObject:str];
}
}
}
#pragma mark - User Query
-(void)retrieveAllUser {
/// Creiamo una referenza al Database di Firebase
FIRDatabaseReference *dbRef = FIRDatabase.database.reference;
/// Effettuiamo la query
[[[dbRef child:kUserAccFolder] queryOrderedByChild:kUserAccEmail] observeEventType:FIRDataEventTypeChildAdded withBlock:^(FIRDataSnapshot *snapshot) {
NSDictionary *dict = snapshot.value;
if (dict) {
self.user = UserHandler.new;
self.user.name = dict[kUserAccName];
self.user.university = dict [kUserAccUniversity];
self.user.photoProfileURL = dict [kUserAccUrlImage];
self.user.userID = snapshot.key;
[self.users addObject:self.user];
}
[self.tableView reloadData];
}];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
if (_isFiltered) return self.filteredUsers.count;
return self.users.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UserSearchCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cellID" forIndexPath:indexPath];
self.user = _isFiltered ? self.filteredUsers[indexPath.row] : self.users[indexPath.row];
cell.name.text = self.user.name;
return cell;
}