Я работаю над студенческим проектом.
В этот момент наше приложение может вызвать API и перезагрузить данные, но только если я вызову XMLParser внутри textDidChange.
Значение: он правильно вызывает и перезагружается каждый раз, когда в UISearchBar вводится буква.Я хочу, чтобы вызов и перезагрузка происходили только тогда, когда пользователь нажимает кнопку «Поиск», но тот же код, который работает в textDidChange , не работает в searchBarSearchButtonClicked .
Вместо этого. Метод вызывает API только при нажатии кнопки поиска (хорошо) , получает ту же информацию, что и textDidChange (хорошо) но не перезагружает UITableView (плохо) .
Я искал повсюду SO для ответа на мою проблему, поэтому я решил вместо этого задать вопрос :)
Все примеры, с которыми я столкнулся, показывают только какотображать содержимое массива, которое соответствует критериям пользователя при вводе пользователем (список контактов), но не показывает, как использовать кнопку поиска для правильной перезагрузки uitableView.
Почему тот же самый точный код корректно перезагружается в методе делегата
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
, но не в
- (void)searchBarSearchButtonClicked:(UISearchBar *)theSearchBar
?
Как я уже сказал, NSLog выводит правильные данные для загрузки uitableview при нажатии кнопки searchButton, так что это не проблема.
Кто-нибудь может указать мне правильное направление здесь?:)
Мой cellForRowAtIndexPath:
`
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *uniqueIdentifier = @"searchCell";
SearchCell *cell = nil;
cell = (SearchCell *) [self.tableView dequeueReusableCellWithIdentifier:uniqueIdentifier];
if(!cell)
{
NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"SearchCell" owner:nil options:nil];
for (id currentObject in topLevelObjects) {
if ([currentObject isKindOfClass:[SearchCell class]]) {
cell = (SearchCell *)currentObject;
break;
}
}
}
Search *currentSearch = [[searchxmlParser searchhits] objectAtIndex:indexPath.row];
cell.track_label.text = [currentSearch track];
cell.artist_label.text = [currentSearch artist];
return cell;
}
Запрошенные методы делегата:
- (void)searchBar:(UISearchBar *)theSearchBar textDidChange:(NSString *)searchText {
NSString *searchurl = [NSString stringWithFormat:@"http://ws.spotify.com/search/1/track?q=%@", [self urlEncodeValue:searchText]];
xmlParser = [[SearchXMLParser alloc] loadXMLByURL:searchurl];
[self.tableView reloadData];
}
- (void)searchBarSearchButtonClicked:(UISearchBar *)theSearchBar {
NSString *searchurl = [NSString stringWithFormat:@"http://ws.spotify.com/search/1/track?q=%@", [self urlEncodeValue:theSearchBar.text]];
xmlParser = [[SearchXMLParser alloc] loadXMLByURL:searchurl];
[self.tableView reloadData];
[theSearchBar setShowsCancelButton:NO animated:YES];
[theSearchBar resignFirstResponder];
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
// Return the number of sections.
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
// Return the number of rows in the section.
return [[searchxmlParser searchhits] count];
}
Спасибо за ваше время!:)