0

Обычно пользователь вводит текст в строке поиска uis, а когда пользователь нажимает кнопку поиска, мы запрашиваем веб-сервис и показываем в searchResultsTableView.Автоматический поиск в поискеDisplayController

Мой текущий случай вместо ввода строки uisearch, это программный поиск текста поиска и поиск. Поэтому мне это нравится. Проблема в том, что просмотр uisearchdisplaycontrollerdimming не скрыт. Он блокирует взаимодействие пользователя и не может видеть контент. Могу я знать, как это сделать?

[self.searchDisplayController setActive:YES animated:YES]; 

//Put text to search bar, retrieve data and show in searchResultsTableView 

enter image description here

ответ

0

Выполните следующие блог: building-a-searchview-with-uisearchbar-and-uitableview

SearchViewController.h

// 
// SearchViewController.h 
// 
#import <UIKit/UIKit.h> 

@interface SearchViewController : UIViewController 
<UISearchBarDelegate, UITableViewDataSource> { 
    NSMutableArray *tableData; 

    UIView *disableViewOverlay; 

    UITableView *theTableView; 
    UISearchBar *theSearchBar; 
} 

@property(retain) NSMutableArray *tableData; 
@property(retain) UIView *disableViewOverlay; 

@property (nonatomic, retain) IBOutlet UITableView *theTableView; 
@property (nonatomic, retain) IBOutlet UISearchBar *theSearchBar; 

- (void)searchBar:(UISearchBar *)searchBar activate:(BOOL) active; 

@end 

SearchViewController.m

// 
// SearchViewController.m 
// 
#import "SearchViewController.h" 

@implementation SearchViewController 
@synthesize tableData; 
@synthesize disableViewOverlay; 
@synthesize theSearchBar; 
@synthesize theTableView; 


// Initialize tableData and disabledViewOverlay 
- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.tableData =[[NSMutableArray alloc]init]; 
    self.disableViewOverlay = [[UIView alloc] 
    initWithFrame:CGRectMake(0.0f,44.0f,320.0f,416.0f)]; 
    self.disableViewOverlay.backgroundColor=[UIColor blackColor]; 
    self.disableViewOverlay.alpha = 0; 
} 

// Since this view is only for searching give the UISearchBar 
// focus right away 
- (void)viewDidAppear:(BOOL)animated { 
    [self.theSearchBar becomeFirstResponder]; 
    [super viewDidAppear:animated]; 
} 

#pragma mark - 
#pragma mark UISearchBarDelegate Methods 

- (void)searchBar:(UISearchBar *)searchBar 
    textDidChange:(NSString *)searchText { 
    // We don't want to do anything until the user clicks 
    // the 'Search' button. 
    // If you wanted to display results as the user types 
    // you would do that here. 
} 

- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar { 
    // searchBarTextDidBeginEditing is called whenever 
    // focus is given to the UISearchBar 
    // call our activate method so that we can do some 
    // additional things when the UISearchBar shows. 
    [self searchBar:searchBar activate:YES]; 
} 

- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar { 
    // searchBarTextDidEndEditing is fired whenever the 
    // UISearchBar loses focus 
    // We don't need to do anything here. 
} 

- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar { 
    // Clear the search text 
    // Deactivate the UISearchBar 
    [email protected]""; 
    [self searchBar:searchBar activate:NO]; 
} 

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar { 
    // Do the search and show the results in tableview 
    // Deactivate the UISearchBar 

    // You'll probably want to do this on another thread 
    // SomeService is just a dummy class representing some 
    // api that you are using to do the search 
    NSArray *results = [SomeService doSearch:searchBar.text]; 

    [self searchBar:searchBar activate:NO]; 

    [self.tableData removeAllObjects]; 
    [self.tableData addObjectsFromArray:results]; 
    [self.theTableView reloadData]; 
} 

// We call this when we want to activate/deactivate the UISearchBar 
// Depending on active (YES/NO) we disable/enable selection and 
// scrolling on the UITableView 
// Show/Hide the UISearchBar Cancel button 
// Fade the screen In/Out with the disableViewOverlay and 
// simple Animations 
- (void)searchBar:(UISearchBar *)searchBar activate:(BOOL) active{ 
    self.theTableView.allowsSelection = !active; 
    self.theTableView.scrollEnabled = !active; 
    if (!active) { 
     [disableViewOverlay removeFromSuperview]; 
     [searchBar resignFirstResponder]; 
    } else { 
     self.disableViewOverlay.alpha = 0; 
     [self.view addSubview:self.disableViewOverlay]; 

     [UIView beginAnimations:@"FadeIn" context:nil]; 
     [UIView setAnimationDuration:0.5]; 
     self.disableViewOverlay.alpha = 0.6; 
     [UIView commitAnimations]; 

     // probably not needed if you have a details view since you 
     // will go there on selection 
     NSIndexPath *selected = [self.theTableView 
      indexPathForSelectedRow]; 
     if (selected) { 
      [self.theTableView deselectRowAtIndexPath:selected 
       animated:NO]; 
     } 
    } 
    [searchBar setShowsCancelButton:active animated:YES]; 
} 


#pragma mark - 
#pragma mark UITableViewDataSource Methods 

- (NSInteger)tableView:(UITableView *)tableView 
numberOfRowsInSection:(NSInteger)section { 
    return [tableData count]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView 
     cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *MyIdentifier = @"SearchResult"; 
    UITableViewCell *cell = [tableView 
    dequeueReusableCellWithIdentifier:MyIdentifier]; 

    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] 
     initWithStyle:UITableViewCellStyleDefault 
     reuseIdentifier:MyIdentifier] autorelease]; 
    } 

    id *data = [self.tableData objectAtIndex:indexPath.row]; 
    cell.textLabel.text = data.name; 
    return cell; 
} 

#pragma mark - 
#pragma mark Memory Management Methods 

- (void)didReceiveMemoryWarning { 
    // Releases the view if it doesn't have a superview. 
    [super didReceiveMemoryWarning];  
    // Release any cached data, images, etc that aren't in use. 
} 

- (void)viewDidUnload { 
    // Release any retained subviews of the main view. 
    // e.g. self.myOutlet = nil; 
} 


- (void)dealloc { 
    [theTableView release], theTableView = nil; 
    [theSearchBar release], theSearchBar = nil; 
    [tableData dealloc]; 
    [disableViewOverlay dealloc]; 
    [super dealloc]; 
} 

@end 
Смежные вопросы