2015-05-18 7 views
2

Я скрыл свою навигационную панель в моем контроллере просмотра таблицы, но после выбора строки поиска и затем отклонения ее с помощью Отмена, она снова отображает панель навигации. Я попыталсяСкрыть панель навигации после использования строки поиска

-(void)searchBarTextDidEndEditing:(UISearchBar *)searchBar { 
    self.navigationController.navigationBar.hidden = YES; 
} 

Но это не сработало, он сделал скрыть навигационную панель с точки зрения детализации, хотя, но это не желательно.

В раскадровке у меня есть tabBarController -> navigationController -> tableView -> detailview.

EDITED:

Мой код:

-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString 
{ 
    [self filterContentForSearchText:searchString 
           scope:[[self.searchDisplayController.searchBar scopeButtonTitles] 
             objectAtIndex:[self.searchDisplayController.searchBar 
                selectedScopeButtonIndex]]]; 

    return YES; 
} 

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope 
{ 
    NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"name contains[c] %@", searchText]; 
    searchResults = [_truckArray filteredArrayUsingPredicate:resultPredicate]; 
} 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    if (tableView == self.searchDisplayController.searchResultsTableView) { 
     return 1; 
    } else { 
    return [_sectionTitles count]; 
    } 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    if (tableView == self.searchDisplayController.searchResultsTableView) { 
     if (section == 0) { 
      [_sectionTitles replaceObjectAtIndex:0 withObject:@""]; 
      [tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone]; 
     return [searchResults count]; 
     } else { 
      return 0; 
     } 
    } else { 
    NSString *sectionName = [_sectionTitles objectAtIndex:section]; 
    NSArray *sectionArray = [_sections objectForKey:sectionName]; 
    return [sectionArray count]; 
    } 
} 

В cellForRowAtIndexPath:

Item *item = nil; 
    if (tableView == self.searchDisplayController.searchResultsTableView) { 
     item = [searchResults objectAtIndex:indexPath.row]; 
} else { 
    NSString *sectionTitle = [_sectionTitles objectAtIndex:indexPath.section]; 
    NSArray *sectionArray = [_sections objectForKey:sectionTitle]; 
    item = [sectionArray objectAtIndex:indexPath.row]; 
} 
+0

У вас есть попытки - (void) searchBarCancelButtonClicked: (UISearchBar *) searchBar – Mukesh

+0

Да, но панель навигации все еще существует. – pouncelciot

+0

Ур поисковая строка переходит на панель навигации при поиске? Может у пост ур код, как и инициализировать строку поиска – Mukesh

ответ

5

Если когда вы закроете панель поиска попытаться увидеть, если вы звоните снова viewDidAppear или метод viewWillAppear вашего tableView a там вызовите ваш код, чтобы скрыть панель навигации.

Я точно знаю, что, когда вы показываете модальное представление, когда вы отклоняете представление, вызывается метод viewDidAppear, возможно, здесь у вас такое же поведение.

- (void)viewWillAppear:(BOOL)animated 
{ 
    [self.navigationController setNavigationBarHidden:YES animated:animated]; 
} 

- (void)viewDidAppear:(BOOL)animated 
{ 
    [self.navigationController setNavigationBarHidden:YES animated:animated]; 
} 

Надеюсь, это поможет.

Счастливое кодирование.

+0

Я забыл упомянуть об этом, но я уже это делаю. Я не уверен, почему он не работает. В любом случае, спасибо! – pouncelciot

+1

Работает отлично – iDev750

0

Что касается скрытия навигационной панели на searchBarTextDidBeginEditing и включения ее снова searchBarTextDidEndEditing, вам просто нужно анимировать рамку навигационной панели, чтобы скрыть и показать.

-(void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar{ 
      [UIView animateWithDuration:0.2 animations:^{ 


       self.navigationController.navigationBar.frame = CGRectMake(0, -64, 320, self.navigationController.navigationBar.frame.size.height); 
      }]; 

     } 

    -(void)searchBarTextDidEndEditing:(UISearchBar *)searchBar{ 
      [UIView animateWithDuration:0.2 animations:^{ 

       self.navigationController.navigationBar.frame = CGRectMake(0, 64, 320, self.navigationController.navigationBar.frame.size.height); 
      }]; 
     } 

Примечания: -I добавили жестко запрограммированное значение оси Y и ширину, она может быть легко вычислена в соответствии с навигационным-баром рамы и статус-бар кадра.

+0

Спасибо! К сожалению, это не сработало. Панель навигации все еще существует. – pouncelciot

0
//Search Controller 

-(void)initSearchController{ 
self.isSearchActive=false; 
self.searchBarTimeline=[[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 44)]; 
[self.view addSubview:self.searchBarTimeline]; 

self.searchBarTimeline.delegate=self; 

[email protected]"Search"; 
self.searchBarTimeline.searchBarStyle=UISearchBarStyleMinimal; 


[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setTextColor:[UIColor blackColor]]; 

}  


#pragma mark - Tableview search 
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar{ 
[self.searchBarTimeline setShowsCancelButton:YES animated:YES]; 
} 

- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar{ 
[self.searchBarTimeline setShowsCancelButton:NO animated:YES]; 
} 

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{ 

self.isSearchActive=true; 
NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"timecontact.userName contains[c] %@ OR timecontact.userSummary contains[c] %@", searchText,searchText]; 
searchTimelineResults = [[[[UIAppDelegate coreDataHelper] timelineFetchedResultsController] fetchedObjects] filteredArrayUsingPredicate:resultPredicate]; 

if(searchTimelineResults.count==0){ 
    self.isSearchActive=false; 
} 
else{ 
    self.isSearchActive=true; 
} 
[self.tableView reloadData]; 
} 

Играть с флагом isSearchActive и перезагружать данные Tableview

+0

Спасибо, но все равно не работает. :/ – pouncelciot

+0

, пожалуйста, напишите ur код, чтобы мы могли найти то, что проблема в этом – Mukesh

+0

Я добавил его сейчас. – pouncelciot

1

Убедитесь, что вы установили <UISearchBarDelegate> в контроллере представления

или исх .. self.searchBarRef.delegate=self;

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText { 
    if([searchText isEqualToString:@""] || searchText==nil) { 
     self.navigationController.navigationBar.hidden = YES; 
    } 
} 

// ИЛИ использовать ниже метод делегата

- (void)searchDisplayControllerDidEndSearch:(UISearchDisplayController *)controller 
{ 
    self.navigationController.navigationBar.hidden = YES; 
} 

Держите ниже код на viewWillAppear или ViewDidLoad и проверить его.

if ([self respondsToSelector:@selector(edgesForExtendedLayout)]) 
     self.edgesForExtendedLayout = UIRectEdgeNone; 

Надеюсь, что проблема решена ...!

+0

. Я попробовал это сейчас, она все еще не работает. Очень странно! – pouncelciot

+0

Вызывает ли какой-либо метод делегирования панели поиска ..! – Vidhyanand

+0

Они, похоже, должны работать – pouncelciot