/ / Как да изтегля от два източника на данни за един UITableView [затворен] - ios, object-c, uitableview

Как да изтегля от два източника на данни за един UITableView [затворен] - ios, object-c, uitableview

Бих искал да знам как да извърша търсенебар, който функционира много подобно на приложението в Instagram. Моята лента за търсене е поставена над UITableView (списък с приятели). Понастоящем филтрира списъка с приятели, за да съответства на думата за търсене. Моята цел е също така да имам лентата за търсене изтегля данни от моя сървър (Parse) и да показва, че под локално търсените данни.

IE: Търсенето на "Стив" ще върне UITableView на всички местни Стив в списъка на приятелите на потребителя и други Стив, които са на сървъра, но потребителят не е приятел. искане за приятел.

Как да постигна тази функция?

Отговори:

1 за отговор № 1

Трябва да създадете контролер за изглед (за предпочитане a UITableViewController), която съответства на UISearchBarDelegate, UITableViewDataSource, и UITableViewDelegate.

След като тези методи на протокол са настроени правилно, можете да превключвате между два източника на данни, напр NSArray за users и а NSMutableArray за searchResults.

След това, в UISearchBarDelegate методи, можете да актуализирате searchResults променлив масив с резултатите от предиката за търсене на текст и опресняване на tableView данни.

Ако търсенето е отменено или изтрито, searchResults трябва да се върне nil.

В UITableViewDataSource методи, проверете дали searchResults съществува и ако е така, заредете клетките от този масив:

@interface YourViewController () <UISearchBarDelegate, UITableViewDataSource, UITableViewDelegate>
/* ... */

@property (nonatomic, strong) NSMutableArray *searchResults;
@property (nonatomic, strong) NSArray *users;

@end

@implementation YourViewControler

/* ... */

- (void)setSearchResults:(NSMutableArray *)searchResults
{
_searchResults = searchResults;
[self.mainView.collectionView reloadData];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if (self.searchResults) {
return self.searchResults.count;
} else {
return users.count;
}
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
YourTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

if (self.searchResults) {
/* ...  */
} else {
/* ... */
}

return cell;
}

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
if (searchText.length > 2) {
NSPredicate *searchPredicate = [NSPredicate predicateWithFormat:@"(user.name CONTAINS[cd] %@) OR (user.username CONTAINS[cd] %@)", searchText, searchText];
self.searchResults = [[self.users filteredArrayUsingPredicate:searchPredicate] mutableCopy];
NSLog(@"Search Result: %@", [self.searchResults valueForKey:@"username"]);
} else if (searchText.length == 0) {
self.searchResults = nil;
}
}

- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar
{
self.searchResults = nil;
searchBar.text = @"";
[searchBar resignFirstResponder];
}

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
[searchBar resignFirstResponder];
}

@end